{"id":402,"date":"2026-08-08T19:54:49","date_gmt":"2026-08-08T17:54:49","guid":{"rendered":"https:\/\/www.dr-reinigingstechniek.eu\/de\/downloads\/"},"modified":"2026-10-31T20:42:13","modified_gmt":"2026-10-31T19:42:13","slug":"downloads","status":"publish","type":"page","link":"https:\/\/www.dr-reinigingstechniek.eu\/de\/downloads\/","title":{"rendered":"Downloads"},"content":{"rendered":"\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/dr-reinigingstechniek.eu\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Downloads\",\"item\":\"https:\/\/dr-reinigingstechniek.eu\/downloads\"}]}<\/script>\n<div id=\"main-content\">\n<div id=\"downloads-content\"><section class=\"machines-page-hero downloads-hero\" aria-labelledby=\"downloads-title\"><div class=\"machines-page-hero-image downloads-hero-image service-category-visual-downloads\" role=\"img\" aria-label=\"Technische Dokumentation, Anleitungen und Downloads von DR Reinigingstechniek\"><\/div><div class=\"shell machines-page-hero-inner\"><div class=\"machines-page-hero-copy\"><div class=\"eyebrow\"><span><\/span> Dokumentationszentrum<\/div><h1 id=\"downloads-title\">Downloads &amp; Dokumentation<\/h1><p>Finden Sie \u00f6ffentliche Produktinformationen und, nach Anmeldung, technische Dokumentation f\u00fcr autorisierte H\u00e4ndler.<\/p><div class=\"page-breadcrumb\"><a href=\"\/de\/\">Startseite<\/a><span>\/<\/span><strong>Downloads<\/strong><\/div><\/div><\/div><\/section><section class=\"downloads-section downloads-public-section\" aria-labelledby=\"public-downloads-title\"><div class=\"shell\"><div class=\"catalog-heading downloads-heading\"><div><div class=\"eyebrow\"><span><\/span> \u00d6ffentliche Downloads<\/div><h2 id=\"public-downloads-title\">Dokumente f\u00fcr Kunden und Anwender<\/h2><\/div><p>Anleitungen, Brosch\u00fcren und \u00f6ffentliche Produktinformationen k\u00f6nnen sp\u00e4ter dynamisch in diesen Bereich geladen werden.<\/p><\/div><div id=\"downloads-filter-tabs\" class=\"filter-tabs\" role=\"tablist\" aria-label=\"Nach Maschine filtern\"><\/div><div id=\"downloads-list\" class=\"downloads-grid\" role=\"list\" aria-live=\"polite\" aria-busy=\"false\"><\/div><p id=\"downloads-status\" class=\"downloads-status\" role=\"status\" aria-live=\"polite\"><\/p><\/div><\/section><section class=\"downloads-section downloads-dealer-section\" aria-labelledby=\"dealer-downloads-title\"><div class=\"shell\"><div class=\"dealer-downloads-panel\"><div class=\"dealer-downloads-intro\"><div class=\"dealer-lock-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"5\" y=\"10\" width=\"14\" height=\"11\" rx=\"2\"><\/rect><path d=\"M8 10V7a4 4 0 0 1 8 0v3M12 14v3\"><\/path><\/svg><\/div><div><div class=\"eyebrow\"><span><\/span> Gesch\u00fctzter H\u00e4ndlerbereich<\/div><h2 id=\"dealer-downloads-title\">Technische H\u00e4ndlerdokumentation<\/h2><p>Nach g\u00fcltiger H\u00e4ndleranmeldung kann das Portal Servicehandb\u00fccher, Diagnosedokumentation und technische Dateien per JavaScript in den leeren H\u00e4ndlercontainer laden.<\/p><\/div><a href=\"\/de\/mein-konto\/\" class=\"button button-primary\">Als H\u00e4ndler anmelden <span class=\"arrow arrow-short\" aria-hidden=\"true\">\u2192<\/span><\/a><\/div><div id=\"dealer-downloads-list\" class=\"downloads-grid dealer-downloads-grid\" role=\"list\" aria-live=\"polite\" aria-busy=\"false\" data-access=\"dealer\"><\/div><p id=\"dealer-downloads-status\" class=\"downloads-status dealer-downloads-status\" role=\"status\" aria-live=\"polite\"><\/p><\/div><\/div><\/section><section class=\"downloads-help-section\" aria-labelledby=\"downloads-help-title\"><div class=\"shell downloads-help-panel\"><div><div class=\"eyebrow\"><span><\/span> Dokument nicht gefunden?<\/div><h2 id=\"downloads-help-title\">Fordern Sie die richtige Datei bei uns an<\/h2><p>Geben Sie das Maschinen-, Roboter- oder Teilemodell und vorzugsweise die Seriennummer an. So k\u00f6nnen wir die richtige Dokumentversion liefern.<\/p><\/div><a href=\"mailto:info@reinigingstechniek.eu?subject=Aanvraag%20documentatie\" class=\"button button-primary\">Dokumentation anfragen <span class=\"arrow arrow-short\" aria-hidden=\"true\">\u2192<\/span><\/a><\/div><\/section><section class=\"trust-strip\" aria-label=\"Unsere St\u00e4rken\"><div class=\"shell trust-grid\"><div class=\"trust-item\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z\"><\/path><path d=\"m9 12 2 2 4-5\"><\/path><\/svg><div><strong>26 Jahre Erfahrung<\/strong><span>Familienbetrieb mit Fachwissen<\/span><\/div><\/div><div class=\"trust-item\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M14.7 6.3a4 4 0 0 0-5-5l2.1 2.1-2.4 2.4-2.1-2.1a4 4 0 0 0 5 5L5 16l-2 4 4-2 7.7-7.7Z\"><\/path><\/svg><div><strong>Service in eigener Werkstatt<\/strong><span>Mechanik, Elektronik und F&amp;E<\/span><\/div><\/div><div class=\"trust-item\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"m21 8-9 5-9-5 9-5 9 5Z\"><\/path><path d=\"m3 8 9 5 9-5v9l-9 5-9-5V8Z\"><\/path><path d=\"M12 13v9\"><\/path><\/svg><div><strong>Sofort lieferbar<\/strong><span>Neue und aufbereitete Maschinen auf Lager<\/span><\/div><\/div><\/div><\/section><\/div>\n<\/div>\n<script>\n(() => {\n  'use strict';\n  const SITE_ORIGIN = 'https:\/\/dr-reinigingstechniek.eu';\n  const targets = {\n    public: { list: 'downloads-list', status: 'downloads-status' },\n    dealer: { list: 'dealer-downloads-list', status: 'dealer-downloads-status' }\n  };\n\n  const allowedUrl = (value) => {\n    if (typeof value !== 'string' || !value.trim()) return false;\n    if (value.startsWith('\/')) return true;\n    try { return new URL(value).origin === SITE_ORIGIN; } catch { return false; }\n  };\n\n  const text = (value, fallback = '') => typeof value === 'string' && value.trim() ? value.trim() : fallback;\n\n  const createCard = (item) => {\n    if (!item || !allowedUrl(item.url)) return null;\n    const card = document.createElement('article');\n    card.className = 'download-card';\n    card.setAttribute('role', 'listitem');\n\n    const type = document.createElement('span');\n    type.className = 'download-card-type';\n    type.textContent = text(item.type, 'Document');\n\n    const heading = document.createElement('h3');\n    heading.textContent = text(item.title, 'Document');\n\n    const description = document.createElement('p');\n    description.textContent = text(item.description, 'Open het document voor meer informatie.');\n\n    const meta = document.createElement('div');\n    meta.className = 'download-card-meta';\n    meta.textContent = [text(item.language), text(item.version), text(item.size)].filter(Boolean).join(' \u00b7 ');\n    meta.hidden = !meta.textContent;\n\n    const link = document.createElement('a');\n    link.className = 'download-card-link';\n    link.href = item.url;\n    link.target = '_top';\n    link.rel = 'noopener';\n    link.textContent = text(item.linkLabel, 'Download document \u2192');\n    if (item.download === true) link.setAttribute('download', '');\n\n    card.append(type, heading, description, meta, link);\n    return card;\n  };\n\n  const render = (scope, items, options = {}) => {\n    const target = targets[scope];\n    if (!target) throw new Error('Onbekende downloadsectie.');\n    const list = document.getElementById(target.list);\n    const status = document.getElementById(target.status);\n    if (!list || !status) throw new Error('Downloadcontainer ontbreekt.');\n    list.replaceChildren();\n    list.setAttribute('aria-busy', 'false');\n    const collection = Array.isArray(items) ? items : [];\n    const fragment = document.createDocumentFragment();\n    let rendered = 0;\n    collection.forEach((item) => {\n      const card = createCard(item);\n      if (card) { fragment.append(card); rendered += 1; }\n    });\n    list.append(fragment);\n    status.textContent = rendered ? text(options.successMessage, rendered + (rendered === 1 ? ' document beschikbaar.' : ' documenten beschikbaar.')) : text(options.emptyMessage, 'Er zijn momenteel geen documenten beschikbaar.');\n    return rendered;\n  };\n\n  const load = async (scope, endpoint, options = {}) => {\n    if (!allowedUrl(endpoint)) throw new Error('Alleen interne .eu-downloadbronnen zijn toegestaan.');\n    const target = targets[scope];\n    if (!target) throw new Error('Onbekende downloadsectie.');\n    const list = document.getElementById(target.list);\n    const status = document.getElementById(target.status);\n    list.setAttribute('aria-busy', 'true');\n    status.textContent = text(options.loadingMessage, 'Documenten worden geladen\u2026');\n    try {\n      const response = await fetch(endpoint, { credentials: 'same-origin', headers: { Accept: 'application\/json' } });\n      if (!response.ok) throw new Error('Downloadbron antwoordde met status ' + response.status + '.');\n      const payload = await response.json();\n      const items = Array.isArray(payload) ? payload : payload.items;\n      return render(scope, items, options);\n    } catch (error) {\n      list.replaceChildren();\n      list.setAttribute('aria-busy', 'false');\n      status.textContent = text(options.errorMessage, 'De documenten konden niet worden geladen.');\n      throw error;\n    }\n  };\n\n  window.DRDownloads = Object.freeze({\n    renderPublic: (items, options) => render('public', items, options),\n    renderDealer: (items, options) => render('dealer', items, options),\n    loadPublic: (endpoint, options) => load('public', endpoint, options),\n    loadDealer: (endpoint, options) => load('dealer', endpoint, options),\n    clear: () => { render('public', [], { emptyMessage: '' }); render('dealer', [], { emptyMessage: '' }); }\n  });\n})();\n<\/script>\n<script>\n(() => {\n  const ALL_LABEL = 'Alles';\n\n  const text = (value, fallback = '') => typeof value === 'string' && value.trim() ? value.trim() : fallback;\n\n  const allowedUrl = (value) => {\n    if (typeof value !== 'string' || !value.trim()) return false;\n    if (value.startsWith('\/')) return true;\n    try { return new URL(value).origin === window.location.origin; } catch { return false; }\n  };\n\n  const createCard = (item) => {\n    if (!item || !allowedUrl(item.url)) return null;\n    const card = document.createElement('article');\n    card.className = 'download-card';\n    card.setAttribute('role', 'listitem');\n    card.dataset.category = text(item.category, 'Overig');\n\n    const type = document.createElement('span');\n    type.className = 'download-card-type';\n    type.textContent = text(item.type, 'Document');\n\n    const heading = document.createElement('h3');\n    heading.textContent = text(item.title, 'Document');\n\n    const description = document.createElement('p');\n    description.textContent = text(item.description, 'Open het document voor meer informatie.');\n\n    const meta = document.createElement('div');\n    meta.className = 'download-card-meta';\n    meta.textContent = [text(item.language), text(item.version), text(item.size)].filter(Boolean).join(' \u00b7 ');\n    meta.hidden = !meta.textContent;\n\n    const link = document.createElement('a');\n    link.className = 'download-card-link';\n    link.href = item.url;\n    link.target = '_top';\n    link.rel = 'noopener';\n    link.textContent = text(item.linkLabel, 'Download document \u2192');\n    if (item.download === true) link.setAttribute('download', '');\n\n    card.append(type, heading, description, meta, link);\n    return card;\n  };\n\n  const buildTabs = (tabsEl, categories, onSelect) => {\n    tabsEl.replaceChildren();\n    const allBtn = document.createElement('button');\n    allBtn.type = 'button';\n    allBtn.textContent = ALL_LABEL;\n    allBtn.className = 'active';\n    allBtn.setAttribute('aria-pressed', 'true');\n    allBtn.addEventListener('click', () => onSelect(null, allBtn));\n    tabsEl.append(allBtn);\n\n    categories.forEach((cat) => {\n      const btn = document.createElement('button');\n      btn.type = 'button';\n      btn.textContent = cat;\n      btn.setAttribute('aria-pressed', 'false');\n      btn.addEventListener('click', () => onSelect(cat, btn));\n      tabsEl.append(btn);\n    });\n  };\n\n  const loadCategorized = async (endpoint, listId, statusId, tabsId, options = {}) => {\n    const list = document.getElementById(listId);\n    const status = document.getElementById(statusId);\n    const tabsEl = tabsId ? document.getElementById(tabsId) : null;\n    if (!list || !status) return;\n\n    list.setAttribute('aria-busy', 'true');\n    status.textContent = text(options.loadingMessage, 'Documenten worden geladen\u2026');\n\n    try {\n      const response = await fetch(endpoint, { credentials: 'same-origin', headers: { Accept: 'application\/json' } });\n      if (!response.ok) throw new Error('Downloadbron antwoordde met status ' + response.status + '.');\n      const payload = await response.json();\n      const items = Array.isArray(payload) ? payload : payload.items || [];\n\n      list.replaceChildren();\n      list.setAttribute('aria-busy', 'false');\n\n      if (!items.length) {\n        status.textContent = text(options.emptyMessage, 'Er zijn momenteel geen documenten beschikbaar.');\n        if (tabsEl) tabsEl.hidden = true;\n        return;\n      }\n\n      const fragment = document.createDocumentFragment();\n      items.forEach((item) => {\n        const card = createCard(item);\n        if (card) fragment.append(card);\n      });\n      list.append(fragment);\n      status.textContent = text(options.successMessage, items.length + (items.length === 1 ? ' document beschikbaar.' : ' documenten beschikbaar.'));\n\n      if (tabsEl) {\n        const categories = [...new Set(items.map((item) => text(item.category, 'Overig')))];\n        if (categories.length > 1) {\n          tabsEl.hidden = false;\n          buildTabs(tabsEl, categories, (category, activeBtn) => {\n            tabsEl.querySelectorAll('button').forEach((btn) => {\n              btn.classList.toggle('active', btn === activeBtn);\n              btn.setAttribute('aria-pressed', btn === activeBtn ? 'true' : 'false');\n            });\n            list.querySelectorAll('.download-card').forEach((card) => {\n              card.hidden = category !== null && card.dataset.category !== category;\n            });\n          });\n        } else {\n          tabsEl.hidden = true;\n        }\n      }\n    } catch (error) {\n      list.replaceChildren();\n      list.setAttribute('aria-busy', 'false');\n      status.textContent = text(options.errorMessage, 'De documenten konden niet worden geladen.');\n      if (tabsEl) tabsEl.hidden = true;\n    }\n  };\n\n  loadCategorized(\n    '\/wp-content\/uploads\/pages\/downloads-data-public.json',\n    'downloads-list', 'downloads-status', 'downloads-filter-tabs',\n    { emptyMessage: 'Er zijn momenteel nog geen publieke documenten beschikbaar. Neem contact op voor specifieke documentatie.' }\n  );\n  loadCategorized(\n    '\/wp-content\/uploads\/pages\/downloads-data-dealer.json',\n    'dealer-downloads-list', 'dealer-downloads-status', null,\n    { emptyMessage: 'Log in als dealer om technische documentatie te bekijken.' }\n  );\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Dokumentationszentrum Downloads &amp; Dokumentation Finden Sie \u00f6ffentliche Produktinformationen und, nach Anmeldung, technische Dokumentation f\u00fcr autorisierte H\u00e4ndler. Startseite\/Downloads \u00d6ffentliche Downloads Dokumente f\u00fcr Kunden und Anwender Anleitungen, Brosch\u00fcren und \u00f6ffentliche Produktinformationen k\u00f6nnen sp\u00e4ter dynamisch in diesen Bereich geladen werden. Gesch\u00fctzter H\u00e4ndlerbereich Technische H\u00e4ndlerdokumentation Nach g\u00fcltiger H\u00e4ndleranmeldung kann das Portal Servicehandb\u00fccher, Diagnosedokumentation und technische Dateien per JavaScript in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"blank-page","meta":{"_dr_native":"1","_dr_lang":"de","_dr_translations":"{\"nl\":123}","footnotes":""},"class_list":["post-402","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.dr-reinigingstechniek.eu\/de\/wp-json\/wp\/v2\/pages\/402","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dr-reinigingstechniek.eu\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.dr-reinigingstechniek.eu\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.dr-reinigingstechniek.eu\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dr-reinigingstechniek.eu\/de\/wp-json\/wp\/v2\/comments?post=402"}],"version-history":[{"count":2,"href":"https:\/\/www.dr-reinigingstechniek.eu\/de\/wp-json\/wp\/v2\/pages\/402\/revisions"}],"predecessor-version":[{"id":943,"href":"https:\/\/www.dr-reinigingstechniek.eu\/de\/wp-json\/wp\/v2\/pages\/402\/revisions\/943"}],"wp:attachment":[{"href":"https:\/\/www.dr-reinigingstechniek.eu\/de\/wp-json\/wp\/v2\/media?parent=402"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}