// Rozszerzona wersja z dodatkowymi opcjami class CartAbandonmentNotifier { constructor(options = {}) { this.config = { originalTitle: document.title, alertTitles: [ '🛒 Nie zapomnij o swoich produktach!', '⏰ Twój koszyk czeka na Ciebie!', '💰 Dokończ zakupy teraz!' ], blinkInterval: 2000, titleRotationInterval: 6000, showFavicon: true, customMessages: true, ...options }; this.state = { blinkTimer: null, rotationTimer: null, isBlinking: false, cartHasItems: false, currentTitleIndex: 0, originalFavicon: null }; this.init(); } // Sprawdzanie stanu koszyka z większą liczbą metod async checkCartStatus() { try { // Metoda 1: PrestaShop global object if (typeof prestashop !== 'undefined' && prestashop.cart) { this.state.cartHasItems = prestashop.cart.products_count > 0; return; } // Metoda 2: AJAX request const response = await fetch(prestashop.urls.base_url + 'index.php?controller=cart&ajax=1&action=refresh', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: 'ajax=1' }); const data = await response.json(); if (data.cart) { this.state.cartHasItems = data.cart.products_count > 0; return; } } catch (error) { console.warn('Błąd AJAX:', error); } // Metoda 3: DOM parsing jako fallback const cartElements = [ '.cart-products-count', '.shopping-cart .count', '#cart-total-quantity', '[data-cart-quantity]' ]; for (const selector of cartElements) { const element = document.querySelector(selector); if (element) { const count = parseInt(element.textContent) || parseInt(element.getAttribute('data-cart-quantity')) || 0; this.state.cartHasItems = count > 0; return; } } } // Zmiana favicon changeFavicon(isAlert = false) { if (!this.config.showFavicon) return; const favicon = document.querySelector('link[rel="icon"], link[rel="shortcut icon"]'); if (!favicon) return; if (isAlert && !this.state.originalFavicon) { this.state.originalFavicon = favicon.href; // Tworzenie prostej ikonki alertu (czerwona kropka) const canvas = document.createElement('canvas'); canvas.width = 32; canvas.height = 32; const ctx = canvas.getContext('2d'); ctx.fillStyle = '#ff0000'; ctx.beginPath(); ctx.arc(26, 6, 6, 0, 2 * Math.PI); ctx.fill(); favicon.href = canvas.toDataURL(); } else if (!isAlert && this.state.originalFavicon) { favicon.href = this.state.originalFavicon; } } // Rotacja komunikatów getNextTitle() { const title = this.config.alertTitles[this.state.currentTitleIndex]; this.state.currentTitleIndex = (this.state.currentTitleIndex + 1) % this.config.alertTitles.length; return title; } // Rozpoczęcie migania z rotacją komunikatów startBlinking() { if (this.state.isBlinking || !this.state.cartHasItems) return; this.state.isBlinking = true; let showAlert = true; let currentAlertTitle = this.getNextTitle(); this.changeFavicon(true); // Timer migania tytułu this.state.blinkTimer = setInterval(() => { document.title = showAlert ? currentAlertTitle : this.config.originalTitle; showAlert = !showAlert; }, this.config.blinkInterval); // Timer rotacji komunikatów if (this.config.alertTitles.length > 1) { this.state.rotationTimer = setInterval(() => { currentAlertTitle = this.getNextTitle(); }, this.config.titleRotationInterval); } } // Zatrzymanie wszystkich efektów stopBlinking() { if (this.state.blinkTimer) { clearInterval(this.state.blinkTimer); this.state.blinkTimer = null; } if (this.state.rotationTimer) { clearInterval(this.state.rotationTimer); this.state.rotationTimer = null; } this.state.isBlinking = false; document.title = this.config.originalTitle; this.changeFavicon(false); } // Obsługa zmian widoczności async handleVisibilityChange() { await this.checkCartStatus(); if (document.hidden && this.state.cartHasItems) { this.startBlinking(); } else { this.stopBlinking(); } } // Inicjalizacja init() { this.checkCartStatus(); // Page Visibility API document.addEventListener('visibilitychange', () => this.handleVisibilityChange()); // Nasłuchiwanie zmian w koszyku PrestaShop if (typeof prestashop !== 'undefined') { prestashop.on('updateCart', () => { this.checkCartStatus().then(() => { if (!this.state.cartHasItems && this.state.isBlinking) { this.stopBlinking(); } }); }); } // Obsługa przycisków dodawania do koszyka document.addEventListener('click', (e) => { if (e.target.closest('.add-to-cart, .remove-from-cart, [data-button-action="add-to-cart"]')) { setTimeout(() => this.checkCartStatus(), 500); } }); // Czyszczenie przed zamknięciem window.addEventListener('beforeunload', () => this.stopBlinking()); } } // Inicjalizacja z custom konfiguracją document.addEventListener('DOMContentLoaded', function() { new CartAbandonmentNotifier({ alertTitles: [ '🛒 Masz produkty w koszyku!', '⚡ Wróć i dokończ zakupy!', '🎯 Twoje produkty czekają na Ciebie!' ], blinkInterval: 1500, titleRotationInterval: 5000 }); });

Akcesoria kuchenne

Tuż obok naczyń, garnków i patelni akcesoria kuchenne stanowią niezbędne wyposażenie każdej kuchni. Ułatwiają przygotowywanie składników potraw, dzięki czemu późniejsze gotowania czy pieczenie przebiega szybciej i sprawniej. Odpowiednio dobrane ułatwią codzienne czynności i sprawią, że czas spędzony w kuchni stanie się przyjemnością.

W naszej ofercie znalazły się miski nierdzewne i plastikowe, deski do krojenia, deski szklane, tarki, krajacze, noże oraz obieraczki do warzyw, a także wagi, które pomogą w precyzyjnym odmierzaniu składników. Nie może także zabraknąć przyborów i narzędzi kuchennych, które pozwolą nie tylko usprawnić gotowanie czy smażenie ale także podniosą jej atrakcyjność wizualną.

Akcesoria kuchenne

Aktywne filtry

  • Kolor: Mix kolorów
  • Kolor: Srebrny, jasny brąz
  • Kolor: Szarobeżowy
  • Kolor: Słomkowo-brązowy

Kategoria "Akcesoria Kuchenne" w naszym sklepie internetowym to masa praktycznych i stylowych rozwiązań i gadżetów, które uczynią Twoją kuchnię efektywniejszą i estetyczniejszą. Oferujemy szeroki wybór akcesoriów i narzędzi, które spełnią oczekiwania zarówno doświadczonych kucharzy, jak i entuzjastów gotowania.

Akcesoria niezbędne w każdej kuchni

Niektóre akcesoria kuchenne muszą pojawić się w każdym domu. Są to oczywiście noże, deski do krojenia zarówno te tradycyjne drewniane, jak i deski szklane czy bambusowe, misy i miski stalowe, plastikowe lub emaliowane, sztućce a także tarki, krajacze i obieraczki. Wszystkie te produkty pomogą Ci przyrządzić dania szybko i smacznie! Nasze noże są starannie wykonane, ergonomiczne i zapewniają precyzyjne krojenie, podczas gdy deski do krojenia są trwałe i łatwe w utrzymaniu.

Oferujemy również różnorodne urządzenia ułatwiające codzienne zadania kuchenne, takie jak otwieracze, tłuczki do ziemniaków, młynki do przypraw, wyciskacze do czosnku, minutniki, dziadki do orzechów, foremki do pierogów i wiele innych. Nasze produkty są solidne, łatwe w obsłudze i zaprojektowane z myślą o maksymalnej wygodzie użytkowania. Przybory kuchenne takie jak łopatka do naleśników, łyżka kuchenne, chochelka, łyżka do makaronu, łyżka cedzakowa czy tłuczek do mięsa powinny być zawsze pod ręką.

// Rozszerzona wersja z dodatkowymi opcjami class CartAbandonmentNotifier { constructor(options = {}) { this.config = { originalTitle: document.title, alertTitles: [ '🛒 Nie zapomnij o swoich produktach!', '⏰ Twój koszyk czeka na Ciebie!', '💰 Dokończ zakupy teraz!' ], blinkInterval: 2000, titleRotationInterval: 6000, showFavicon: true, customMessages: true, ...options }; this.state = { blinkTimer: null, rotationTimer: null, isBlinking: false, cartHasItems: false, currentTitleIndex: 0, originalFavicon: null }; this.init(); } // Sprawdzanie stanu koszyka z większą liczbą metod async checkCartStatus() { try { // Metoda 1: PrestaShop global object if (typeof prestashop !== 'undefined' && prestashop.cart) { this.state.cartHasItems = prestashop.cart.products_count > 0; return; } // Metoda 2: AJAX request const response = await fetch(prestashop.urls.base_url + 'index.php?controller=cart&ajax=1&action=refresh', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: 'ajax=1' }); const data = await response.json(); if (data.cart) { this.state.cartHasItems = data.cart.products_count > 0; return; } } catch (error) { console.warn('Błąd AJAX:', error); } // Metoda 3: DOM parsing jako fallback const cartElements = [ '.cart-products-count', '.shopping-cart .count', '#cart-total-quantity', '[data-cart-quantity]' ]; for (const selector of cartElements) { const element = document.querySelector(selector); if (element) { const count = parseInt(element.textContent) || parseInt(element.getAttribute('data-cart-quantity')) || 0; this.state.cartHasItems = count > 0; return; } } } // Zmiana favicon changeFavicon(isAlert = false) { if (!this.config.showFavicon) return; const favicon = document.querySelector('link[rel="icon"], link[rel="shortcut icon"]'); if (!favicon) return; if (isAlert && !this.state.originalFavicon) { this.state.originalFavicon = favicon.href; // Tworzenie prostej ikonki alertu (czerwona kropka) const canvas = document.createElement('canvas'); canvas.width = 32; canvas.height = 32; const ctx = canvas.getContext('2d'); ctx.fillStyle = '#ff0000'; ctx.beginPath(); ctx.arc(26, 6, 6, 0, 2 * Math.PI); ctx.fill(); favicon.href = canvas.toDataURL(); } else if (!isAlert && this.state.originalFavicon) { favicon.href = this.state.originalFavicon; } } // Rotacja komunikatów getNextTitle() { const title = this.config.alertTitles[this.state.currentTitleIndex]; this.state.currentTitleIndex = (this.state.currentTitleIndex + 1) % this.config.alertTitles.length; return title; } // Rozpoczęcie migania z rotacją komunikatów startBlinking() { if (this.state.isBlinking || !this.state.cartHasItems) return; this.state.isBlinking = true; let showAlert = true; let currentAlertTitle = this.getNextTitle(); this.changeFavicon(true); // Timer migania tytułu this.state.blinkTimer = setInterval(() => { document.title = showAlert ? currentAlertTitle : this.config.originalTitle; showAlert = !showAlert; }, this.config.blinkInterval); // Timer rotacji komunikatów if (this.config.alertTitles.length > 1) { this.state.rotationTimer = setInterval(() => { currentAlertTitle = this.getNextTitle(); }, this.config.titleRotationInterval); } } // Zatrzymanie wszystkich efektów stopBlinking() { if (this.state.blinkTimer) { clearInterval(this.state.blinkTimer); this.state.blinkTimer = null; } if (this.state.rotationTimer) { clearInterval(this.state.rotationTimer); this.state.rotationTimer = null; } this.state.isBlinking = false; document.title = this.config.originalTitle; this.changeFavicon(false); } // Obsługa zmian widoczności async handleVisibilityChange() { await this.checkCartStatus(); if (document.hidden && this.state.cartHasItems) { this.startBlinking(); } else { this.stopBlinking(); } } // Inicjalizacja init() { this.checkCartStatus(); // Page Visibility API document.addEventListener('visibilitychange', () => this.handleVisibilityChange()); // Nasłuchiwanie zmian w koszyku PrestaShop if (typeof prestashop !== 'undefined') { prestashop.on('updateCart', () => { this.checkCartStatus().then(() => { if (!this.state.cartHasItems && this.state.isBlinking) { this.stopBlinking(); } }); }); } // Obsługa przycisków dodawania do koszyka document.addEventListener('click', (e) => { if (e.target.closest('.add-to-cart, .remove-from-cart, [data-button-action="add-to-cart"]')) { setTimeout(() => this.checkCartStatus(), 500); } }); // Czyszczenie przed zamknięciem window.addEventListener('beforeunload', () => this.stopBlinking()); } } // Inicjalizacja z custom konfiguracją document.addEventListener('DOMContentLoaded', function() { new CartAbandonmentNotifier({ alertTitles: [ '🛒 Masz produkty w koszyku!', '⚡ Wróć i dokończ zakupy!', '🎯 Twoje produkty czekają na Ciebie!' ], blinkInterval: 1500, titleRotationInterval: 5000 }); });

New Account Register

Already have an account?
Log in instead Lub Reset password