Passa al contenuto principale
Per poter utilizzare il nostro shop in modo completo, suggeriamo di attivare Javascript nel tuo browser.
info@wisy.de
(0.0)
0
total ratings
Consulenza competente
Euro
(EUR )
₹
Rupia indiana
$
Dollaro USA
zł
Polacco złoty
kr
Corona danese
kr
Corona norvegese
kr
Corona svedese
£
Sterlina britannica
TL
Lira turca
KM
Lev bulgaro
kč
Corona ceca
Ft
Fiorino ungherese
lei
Nuovo Leu rumeno
₩
won sudcoreano
¥
Yen giapponese
₽
Rublo russo
RMB¥
Renminbi cinese yuan
€
Euro
Italiano
Bahasa Indonesia
Čeština
Dansk
Deutsch
English
Español
Français
Italiano
Magyar
Nederlands
Norsk
Polski
Português
Română
Slovenčina
Slovenščina
Suomi
Svenska
Türkçe
Ελληνικά
български език
Русский
Українська
中文
日本語
한국어
Set di cisterne
Prodotti
Filtro per l'acqua piovana
Filtro downpipe
Filtro per cisterna
Filtro fine a vortice WFF
WFF a tenuta di pressione
Accessori per filtri
Tecnologia delle pompe
Pompe per acqua piovana
Filtro di aspirazione
Interruttore a galleggiante
Macchine per il cambio automatico
Accessori per pompe
Opere per l'acqua piovana
Multimat
Sigma
Optima
Optima Plus
Maxima
Accessori
Cisterne e barili per la pioggia
Sistemi completi
Cisterne
Barili per la pioggia
Serbatoi di cantina
Accessori per cassette
Accessori di sistema
Insenature calmate
Tracimazione della cisterna
Indicatore del livello di riempimento
Tubi flessibili
Tutti gli accessori
Separatore di sistema per acqua potabile
Stazioni di separazione
Trucco dell'acqua potabile
Uscita di acqua potabile gratuita
Accessori per la protezione dell'acqua potabile
I nostri prodotti per l'installazione del vostro sistema di acqua piovana
Quale cisterna per l'utilizzo dell'acqua piovana?
Utilizzo dell'acqua piovana
Guida all'acqua piovana
Domande frequenti
Raccolta dell'acqua piovana
Filtrare l'acqua piovana
Grandi sistemi di acqua piovana
Filtrazione industriale
Il sistema WISY in 4 fasi
Come si può raccogliere l'acqua piovana?
Scoprite qui perché dovreste filtrare l'acqua piovana.
Per cosa posso usare l'acqua piovana a casa e in giardino?
Contattateci
Contattateci
Partner internazionali
Chi siamo
Catalogo prodotti
Download
Testi di gara
Scarica il catalogo completo dei prodotti WISY
Riferimenti: Fiducia nei prodotti WISY
Riferimenti
Popular categories
Raccogliere l'acqua piovana
Grandi sistemi di acqua piovana
Proteggere l'acqua potabile
Filtrazione industriale
Set di cisterne
Prodotti
Filtro per l'acqua piovana
Filtro downpipe
Filtro per cisterna
Filtro fine a vortice WFF
WFF a tenuta di pressione
Accessori per filtri
Tecnologia delle pompe
Pompe per acqua piovana
Filtro di aspirazione
Interruttore a galleggiante
Macchine per il cambio automatico
Accessori per pompe
Opere per l'acqua piovana
Multimat
Sigma
Optima
Optima Plus
Maxima
Accessori
Cisterne e barili per la pioggia
Sistemi completi
Cisterne
Barili per la pioggia
Serbatoi di cantina
Accessori per cassette
Accessori di sistema
Insenature calmate
Tracimazione della cisterna
Indicatore del livello di riempimento
Tubi flessibili
Tutti gli accessori
Separatore di sistema per acqua potabile
Stazioni di separazione
Trucco dell'acqua potabile
Uscita di acqua potabile gratuita
Accessori per la protezione dell'acqua potabile
I nostri prodotti per l'installazione del vostro sistema di acqua piovana
Quale cisterna per l'utilizzo dell'acqua piovana?
Utilizzo dell'acqua piovana
Guida all'acqua piovana
Domande frequenti
Raccolta dell'acqua piovana
Filtrare l'acqua piovana
Grandi sistemi di acqua piovana
Filtrazione industriale
Il sistema WISY in 4 fasi
Come si può raccogliere l'acqua piovana?
Scoprite qui perché dovreste filtrare l'acqua piovana.
Per cosa posso usare l'acqua piovana a casa e in giardino?
Contattateci
Contattateci
Partner internazionali
Chi siamo
Catalogo prodotti
Download
Testi di gara
Scarica il catalogo completo dei prodotti WISY
Riferimenti: Fiducia nei prodotti WISY
Riferimenti
Carrello degli acquisti
Il tuo carrello degli acquisti è vuoto.
Questo sito Web utilizza i cookie per garantire la migliore esperienza possibile.
Ulteriori informazioni...
Rifiuta
Configura
Accetta tutti i cookie
Indietro
/*ANFANG Java Script von PA*/ /* WISY – Variant Price Loader v2 (DOM lazy + idempotent) */ (() => { const HOST_SEL = '.wisy-pricebox'; const DEFAULT_CCY = 'EUR'; const LOCALE = (document.documentElement.lang || 'de-DE'); const getCookie = (name) => { const m = document.cookie.match(new RegExp('(?:^|; )' + name.replace(/([.$?*|{}()\\[\\]\\/\\+^])/g, '\\$1') + '=([^;]*)')); return m ? decodeURIComponent(m[1]) : null; }; const fmtPrice = (v, ccy) => { const n = Number(v); if (!isFinite(n)) return '–'; try { return new Intl.NumberFormat(LOCALE, { style: 'currency', currency: ccy || DEFAULT_CCY }).format(n); } catch { return n.toFixed(2) + ' ' + (ccy || DEFAULT_CCY); } }; const findAccessKey = () => document.querySelector('meta[name="sw-access-key"]')?.content || document.querySelector('[data-store-api-access-key]')?.getAttribute('data-store-api-access-key') || document.body?.dataset?.accessKey || document.body?.dataset?.swAccessKey || null; const ensureContextToken = async (accessKey) => { let t = getCookie('sw-context-token'); if (t) return t; try { const r = await fetch('/store-api/context', { method: 'POST', headers: { 'sw-access-key': accessKey, 'Content-Type': 'application/json', 'Accept': 'application/json' }, body: JSON.stringify({}) }); if (!r.ok) throw 0; const d = await r.json(); return d.token || getCookie('sw-context-token') || null; } catch { return null; } }; const fetchPriceStoreApi = async (id, accessKey, token) => { try { const r = await fetch(`/store-api/product/${encodeURIComponent(id)}`, { method: 'GET', headers: { 'sw-access-key': accessKey, ...(token ? { 'sw-context-token': token } : {}), 'Accept': 'application/json' } }); if (!r.ok) throw 0; const p = await r.json(); const price = p.calculatedPrice?.unitPrice ?? p.calculatedPrice?.totalPrice ?? p.price?.[0]?.gross ?? p.price?.[0]?.net; const currency = p.currency?.isoCode || DEFAULT_CCY; if (price == null) throw 0; return { price, currency }; } catch { return null; } }; const fetchPriceQuickview = async (id) => { try { const r = await fetch(`/widgets/quickview/${encodeURIComponent(id)}`, { headers: { 'X-Requested-With': 'XMLHttpRequest' } }); if (!r.ok) throw 0; const html = await r.text(); const doc = new DOMParser().parseFromString(html, 'text/html'); let content = doc.querySelector('meta[itemprop="price"]')?.getAttribute('content'); if (content) return { price: Number(content), currency: doc.querySelector('meta[itemprop="priceCurrency"]')?.getAttribute('content') || DEFAULT_CCY }; const anyData = doc.querySelector('[data-gtm-product-price]')?.getAttribute('data-gtm-product-price') || doc.querySelector('[data-price]')?.getAttribute('data-price'); if (anyData) return { price: Number(anyData), currency: DEFAULT_CCY }; const node = doc.querySelector('.product-detail-price, .product-price, [itemprop="price"], .price'); if (node) { const txt = node.textContent.replace(/\s+/g, ' ').trim(); const m = txt.match(/([0-9]+(?:[.,][0-9]{1,2})?)/); if (m) return { price: Number(m[1].replace(/\./g, '').replace(',', '.')), currency: DEFAULT_CCY }; } return null; } catch { return null; } }; const fetchOnePrice = async (id) => { const key = findAccessKey(); if (key) { const token = await ensureContextToken(key); const viaStore = await fetchPriceStoreApi(id, key, token); if (viaStore) return viaStore; } const viaWidget = await fetchPriceQuickview(id); if (viaWidget) return viaWidget; return { price: null, currency: DEFAULT_CCY, error: true }; }; // --- Parser: 1) JSON 2) Kinder 3) CSV const parseFromJson = (host) => { const raw = host.getAttribute('data-items-json'); if (!raw) return null; try { const arr = JSON.parse(raw); if (Array.isArray(arr) && arr.length) { return arr.map(x => ({ id: String(x.id || '').trim(), label: String(x.label || x.id || '').trim() })).filter(x => x.id); } } catch { /* noop */ } return null; }; const parseFromChildren = (host) => { const nodes = host.querySelectorAll('.wisy-price-item[data-id]'); if (!nodes.length) return null; return Array.from(nodes).map(n => ({ id: String(n.getAttribute('data-id') || '').trim(), label: String(n.getAttribute('data-label') || n.textContent || '').trim() })).filter(x => x.id); }; const parseFromCsv = (host) => { const raw = host.getAttribute('data-items'); if (!raw) return null; const out = raw.split(';').map(s => s.trim()).filter(Boolean).map(row => { const [id, label] = row.split('|').map(x => (x || '').trim()); return { id, label: label || id }; }).filter(x => x.id); return out.length ? out : null; }; async function renderBox(host) { if (host.dataset.wisyPriceInit === '1') return; // idempotent host.dataset.wisyPriceInit = '1'; const items = parseFromJson(host) || parseFromChildren(host) || parseFromCsv(host) || []; // Grundmarkup sofort sichtbar machen const ul = document.createElement('ul'); ul.className = 'wisy-price-list'; host.innerHTML = ''; host.appendChild(ul); if (!items.length) { const li = document.createElement('li'); li.innerHTML = '
Varianten
Keine Einträge
'; ul.appendChild(li); return; } items.forEach(({ id, label }) => { const li = document.createElement('li'); li.innerHTML = `
${label}
…
`; ul.appendChild(li); }); const results = await Promise.all(items.map(x => fetchOnePrice(x.id))); results.forEach((res, i) => { const id = items[i].id; const out = ul.querySelector(`[data-price-for="${CSS.escape(id)}"]`); if (!out) return; out.classList.remove('is-loading'); if (res && !res.error && res.price != null) { out.textContent = fmtPrice(res.price, res.currency); } else { out.classList.add('is-error'); out.textContent = 'Preis nicht verfügbar'; } }); } function initAll() { document.querySelectorAll(HOST_SEL).forEach(renderBox); } // 1) DOM ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initAll); } else { initAll(); } // 2) Lazy-Load / dynamische Blöcke const mo = new MutationObserver((muts) => { muts.forEach(m => { m.addedNodes.forEach(n => { if (n.nodeType !== 1) return; if (n.matches?.(HOST_SEL)) renderBox(n); n.querySelectorAll?.(HOST_SEL).forEach(renderBox); }); }); }); mo.observe(document.documentElement, { childList: true, subtree: true }); // 3) manueller Trigger (Konsole/Widget) window.wisyInitPrices = initAll; })(); /*ENDE Java Script von PA*/