diff options
| author | Roger Rehnelt <noreply@maennchen1.de> | 2026-10-03 13:15:56 +0200 |
|---|---|---|
| committer | Roger Rehnelt <noreply@maennchen1.de> | 2026-10-03 13:15:56 +0200 |
| commit | 9518f19b14011be59983110c806980820e049b7c (patch) | |
| tree | c78f09912dc06e754e1d5cd5d3b8c80e450b8db3 /views/js/frontend.js | |
| parent | c46dd213226ac8b077a27def76205f7e3ffeb42a (diff) | |
Produktseite: Brotkrumen im Modus „neu“
Start, Kategorie und Produkt über dem Produkt. Steht das Produkt in mehreren Kategorien, zeigt sie die, von der der Besucher kam, sonst die erste. Ähnliche Produkte bekommen keine.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'views/js/frontend.js')
| -rw-r--r-- | views/js/frontend.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/views/js/frontend.js b/views/js/frontend.js index bfae2ea..fb3bdac 100644 --- a/views/js/frontend.js +++ b/views/js/frontend.js @@ -241,3 +241,44 @@ media.querySelectorAll('.wpsg-product__thumb').forEach(function(button) { button.setAttribute('aria-pressed', ((button === thumb)?'true':'false')); });
} );
+
+ /**
+ * Brotkrumen der Produktseite im Modus „neu“: die Kategorie, von der der Besucher kam (Punkt 8.4)
+ *
+ * Der Server gibt die erste Kategorie aus, damit die Seite für Seiten-Caches gleich bleibt.
+ */
+ function wpsg_productBreadcrumbs() {
+
+ if (!document.referrer) return;
+
+ var referrer = document.referrer.split(/[?#]/)[0].replace(/\/page\/\d+\/?$/, '/').replace(/\/?$/, '/');
+
+ document.querySelectorAll('.wpsg-product__breadcrumbs[data-wpsg-trails]').forEach(function(nav) {
+
+ var trails = JSON.parse(nav.getAttribute('data-wpsg-trails'));
+ var trail = trails.find(function(t) { return (t[t.length - 1].url.replace(/\/?$/, '/') === referrer); });
+ if (!trail) return;
+
+ var list = nav.querySelector('ol');
+ list.querySelectorAll('.wpsg-product__crumb-category').forEach(function(li) { li.remove(); });
+
+ trail.forEach(function(crumb) {
+
+ var li = document.createElement('li');
+ var a = document.createElement('a');
+ li.className = 'wpsg-product__crumb-category';
+ a.href = crumb.url;
+ a.textContent = crumb.name;
+ li.appendChild(a);
+ list.insertBefore(li, list.lastElementChild);
+
+ } );
+
+ } );
+
+ } // function wpsg_productBreadcrumbs()
+
+ if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', wpsg_productBreadcrumbs); else wpsg_productBreadcrumbs();
+
+ // Der Variantenwechsel ersetzt das Produkt per Ajax
+ jQuery(document).ajaxComplete(wpsg_productBreadcrumbs);
|
