☰
Menü
Marken
Blockwerk
Boos Blocks
Eisch Gläser
Falk
Forge de Laguiole
Güde
Gräfe & Unzer
Hohenmoorer
Helmensdorfer
Kai
Kinu
Kochen Macht Spaß
Kupfermanufaktur
Kyocera Messer
Macani
Mitheis
Müllernkontor
Nesmuk
Riess
Rösle
Rösle Grill
Sieger
Skeppshult
Windmühlenmesser
XADR
Küche
Bücher
Gewürzmühlen
Küchenhelfer
Küchenmesser
Messer aufbewahren
Messerpflege
Schneidbretter
Töpfe, Pfannen & Co.
Kaffee
Kaffeemühle
Espressobohnen
Angebote
Geschenkideen
Kai Sondereditionen
Prospekt 2025/26
Riess Aktionen
Rösle Angebote
Skeppshult Aktionen
----Sale%
Gutscheine
Anmelden
Anmelden
Registrieren
0
if(!document.getElementById('paypal-smart-payment-script')) { var script = document.createElement("script"); script.type = "module"; script.id = "paypal-smart-payment-script"; script.src = "https://cdn02.plentymarkets.com/nsfenjcurszi/plugin/128/paypal/js/smartPaymentScript.min.js"; script.setAttribute("data-client-id", "AfslQana4f4CQjHvRBnUc6vBJg5jgJuZFwM-SbrTiGKUAqB7MrxQv3QWFdQ6U1h7ogMDokT1DNBzRxMw"); script.setAttribute("data-user-id-token", ""); script.setAttribute("data-merchant-id", "KQ9VDNA6T5T9Q"); script.setAttribute("data-currency", "EUR"); script.setAttribute("data-append-trailing-slash", ""); script.setAttribute("data-locale", "de_DE"); script.setAttribute("sandbox", ""); script.setAttribute("googlePayComponent", 1); script.setAttribute("applePayComponent", 1); script.setAttribute("logToken", "e951756b94a9af71fc6652916b225916"); document.body.appendChild(script); } else { var script = document.getElementById('paypal-smart-payment-script'); script.src = "https://cdn02.plentymarkets.com/nsfenjcurszi/plugin/128/paypal/js/smartPaymentScript.min.js"; script.setAttribute("data-client-id", "AfslQana4f4CQjHvRBnUc6vBJg5jgJuZFwM-SbrTiGKUAqB7MrxQv3QWFdQ6U1h7ogMDokT1DNBzRxMw"); script.setAttribute("data-user-id-token", ""); script.setAttribute("data-merchant-id", "KQ9VDNA6T5T9Q"); script.setAttribute("data-currency", "EUR"); script.setAttribute("data-append-trailing-slash", ""); script.setAttribute("data-locale", "de_DE"); script.setAttribute("sandbox", ""); script.setAttribute("googlePayComponent", 1); script.setAttribute("applePayComponent", 1); script.setAttribute("logToken", "e951756b94a9af71fc6652916b225916"); }
if (typeof paypal_plenty_sdk === 'undefined' || typeof renderPayPalButtons !== 'function') { document.addEventListener('payPalScriptInitialized', () => { renderPayPalButtons('69859fef6a08e', 'paypal', 'paypal', 'rect', 'gold'); }); } else { renderPayPalButtons('69859fef6a08e', 'paypal', 'paypal', 'rect', 'gold'); }
☰
0
if(!document.getElementById('paypal-smart-payment-script')) { var script = document.createElement("script"); script.type = "module"; script.id = "paypal-smart-payment-script"; script.src = "https://cdn02.plentymarkets.com/nsfenjcurszi/plugin/128/paypal/js/smartPaymentScript.min.js"; script.setAttribute("data-client-id", "AfslQana4f4CQjHvRBnUc6vBJg5jgJuZFwM-SbrTiGKUAqB7MrxQv3QWFdQ6U1h7ogMDokT1DNBzRxMw"); script.setAttribute("data-user-id-token", ""); script.setAttribute("data-merchant-id", "KQ9VDNA6T5T9Q"); script.setAttribute("data-currency", "EUR"); script.setAttribute("data-append-trailing-slash", ""); script.setAttribute("data-locale", "de_DE"); script.setAttribute("sandbox", ""); script.setAttribute("googlePayComponent", 1); script.setAttribute("applePayComponent", 1); script.setAttribute("logToken", "e951756b94a9af71fc6652916b225916"); document.body.appendChild(script); } else { var script = document.getElementById('paypal-smart-payment-script'); script.src = "https://cdn02.plentymarkets.com/nsfenjcurszi/plugin/128/paypal/js/smartPaymentScript.min.js"; script.setAttribute("data-client-id", "AfslQana4f4CQjHvRBnUc6vBJg5jgJuZFwM-SbrTiGKUAqB7MrxQv3QWFdQ6U1h7ogMDokT1DNBzRxMw"); script.setAttribute("data-user-id-token", ""); script.setAttribute("data-merchant-id", "KQ9VDNA6T5T9Q"); script.setAttribute("data-currency", "EUR"); script.setAttribute("data-append-trailing-slash", ""); script.setAttribute("data-locale", "de_DE"); script.setAttribute("sandbox", ""); script.setAttribute("googlePayComponent", 1); script.setAttribute("applePayComponent", 1); script.setAttribute("logToken", "e951756b94a9af71fc6652916b225916"); }
if (typeof paypal_plenty_sdk === 'undefined' || typeof renderPayPalButtons !== 'function') { document.addEventListener('payPalScriptInitialized', () => { renderPayPalButtons('69859fef6bee8', 'paypal', 'paypal', 'rect', 'gold'); }); } else { renderPayPalButtons('69859fef6bee8', 'paypal', 'paypal', 'rect', 'gold'); }
Marken
Blockwerk
Boos Blocks
Eisch Gläser
Falk
Forge de Laguiole
Güde
Gräfe & Unzer
Hohenmoorer
Helmensdorfer
Kai
Kinu
Kochen Macht Spaß
Kupfermanufaktur
Kyocera Messer
Macani
Mitheis
Müllernkontor
Nesmuk
Riess
Rösle
Rösle Grill
Sieger
Skeppshult
Windmühlenmesser
XADR
Küche
Bücher
Gewürzmühlen
Küchenhelfer
Küchenmesser
Messer aufbewahren
Messerpflege
Schneidbretter
Töpfe, Pfannen & Co.
Kaffee
Kaffeemühle
Espressobohnen
Angebote
Geschenkideen
Kai Sondereditionen
Prospekt 2025/26
Riess Aktionen
Rösle Angebote
Skeppshult Aktionen
----Sale%
Gutscheine
Service
Gutscheine
Gratis Zugaben
Wunschliste
Versand- / Zahlweisen
Rücksendungen
Warenkorb
Kontakt
Konto
Anmelden
Anmelden
Registrieren
☰
Marken
Blockwerk
Boos Blocks
Eisch Gläser
Falk
Forge de Laguiole
Güde
Gräfe & Unzer
Hohenmoorer
Helmensdorfer
Kai
Kinu
Kochen Macht Spaß
Kupfermanufaktur
Kyocera Messer
Macani
Mitheis
Müllernkontor
Nesmuk
Riess
Rösle
Rösle Grill
Sieger
Skeppshult
Windmühlenmesser
XADR
Küche
Bücher
Gewürzmühlen
Küchenhelfer
Küchenmesser
Messer aufbewahren
Messerpflege
Schneidbretter
Töpfe, Pfannen & Co.
Kaffee
Kaffeemühle
Espressobohnen
Angebote
Geschenkideen
Kai Sondereditionen
Prospekt 2025/26
Riess Aktionen
Rösle Angebote
Skeppshult Aktionen
----Sale%
Gutscheine
0
if(!document.getElementById('paypal-smart-payment-script')) { var script = document.createElement("script"); script.type = "module"; script.id = "paypal-smart-payment-script"; script.src = "https://cdn02.plentymarkets.com/nsfenjcurszi/plugin/128/paypal/js/smartPaymentScript.min.js"; script.setAttribute("data-client-id", "AfslQana4f4CQjHvRBnUc6vBJg5jgJuZFwM-SbrTiGKUAqB7MrxQv3QWFdQ6U1h7ogMDokT1DNBzRxMw"); script.setAttribute("data-user-id-token", ""); script.setAttribute("data-merchant-id", "KQ9VDNA6T5T9Q"); script.setAttribute("data-currency", "EUR"); script.setAttribute("data-append-trailing-slash", ""); script.setAttribute("data-locale", "de_DE"); script.setAttribute("sandbox", ""); script.setAttribute("googlePayComponent", 1); script.setAttribute("applePayComponent", 1); script.setAttribute("logToken", "e951756b94a9af71fc6652916b225916"); document.body.appendChild(script); } else { var script = document.getElementById('paypal-smart-payment-script'); script.src = "https://cdn02.plentymarkets.com/nsfenjcurszi/plugin/128/paypal/js/smartPaymentScript.min.js"; script.setAttribute("data-client-id", "AfslQana4f4CQjHvRBnUc6vBJg5jgJuZFwM-SbrTiGKUAqB7MrxQv3QWFdQ6U1h7ogMDokT1DNBzRxMw"); script.setAttribute("data-user-id-token", ""); script.setAttribute("data-merchant-id", "KQ9VDNA6T5T9Q"); script.setAttribute("data-currency", "EUR"); script.setAttribute("data-append-trailing-slash", ""); script.setAttribute("data-locale", "de_DE"); script.setAttribute("sandbox", ""); script.setAttribute("googlePayComponent", 1); script.setAttribute("applePayComponent", 1); script.setAttribute("logToken", "e951756b94a9af71fc6652916b225916"); }
if (typeof paypal_plenty_sdk === 'undefined' || typeof renderPayPalButtons !== 'function') { document.addEventListener('payPalScriptInitialized', () => { renderPayPalButtons('69859fef6d8d6', 'paypal', 'paypal', 'rect', 'gold'); }); } else { renderPayPalButtons('69859fef6d8d6', 'paypal', 'paypal', 'rect', 'gold'); }
Sprache
Deutsch
Englisch
Lieferland
Finden
Service
Wunschliste
Wunschliste
Alle Artikel in den Warenkorb
(() => { const bulkBtn = document.getElementById("pm-bulk-add"); if (!bulkBtn) return; // Selector-Liste: hier werden typische "Add to basket"-Buttons eingesammelt. // Je nach Template/Widget kann ein anderer Selector nötig sein. const ADD_TO_CART_SELECTORS = [ // sehr generisch (Buttons/Links mit passendem Text) – letzte Reserve 'button, a', // häufige data-Attribute/Classes (je nach plenty/Ceres/Theme unterschiedlich) '[data-add-to-basket]', '[data-testing="add-to-basket"]', '.add-to-basket', '.add-to-cart', '.btn-add-to-basket', '.basket-button' ]; const sleep = (ms) => new Promise(r => setTimeout(r, ms)); const isVisible = (el) => { if (!el) return false; const r = el.getBoundingClientRect(); return r.width > 0 && r.height > 0 && r.bottom >= 0 && r.top <= (window.innerHeight || document.documentElement.clientHeight); }; const looksLikeAddToCart = (el) => { // Nur echte Klick-Targets if (!(el instanceof HTMLElement)) return false; if (el.id === "pm-bulk-add") return false; if (el.disabled) return false; // Textheuristik als Fallback (de/en), damit 'button, a' nicht alles einsammelt const t = (el.innerText || "").trim().toLowerCase(); const okText = t === "in den warenkorb" || t.includes("in den warenkorb") || t.includes("warenkorb") || t.includes("add to cart") || t.includes("add to basket"); // Attribut/klasse ist stärker als Text const okAttr = el.matches('[data-add-to-basket], [data-testing="add-to-basket"], .add-to-basket, .add-to-cart, .btn-add-to-basket, .basket-button'); return okAttr || okText; }; const collectAddButtons = () => { // Sammeln über die Selector-Liste, dann deduplizieren const set = new Set(); for (const sel of ADD_TO_CART_SELECTORS) { document.querySelectorAll(sel).forEach(el => set.add(el)); } const arr = Array.from(set) .filter(looksLikeAddToCart) .filter(isVisible); // nur sichtbare: deckt den Fall ab, dass Listen virtualisiert sind return arr; }; const setBusy = (busy) => { bulkBtn.disabled = busy; bulkBtn.style.opacity = busy ? "0.7" : "1"; }; const clickSequentially = async (buttons) => { // sequenziell, damit Basket-Updates nicht kollidieren for (const btn of buttons) { // Element kann zwischenzeitlich neu gerendert werden if (!document.contains(btn)) continue; if (btn.disabled) continue; // Scroll in View, damit manche Handler (Intersection/virtual DOM) aktiv werden try { btn.scrollIntoView({ block: "center", inline: "nearest" }); } catch (_) {} await sleep(120); // echter Click btn.click(); // kurze Pause für Request + UI state await sleep(350); } }; bulkBtn.addEventListener("click", async (e) => { e.preventDefault(); setBusy(true); try { const buttons = collectAddButtons(); await clickSequentially(buttons); } catch (err) { console.error("[pm-bulk-add]", err); } finally { setBusy(false); } }); })();