Die Lösung schien simpel, aber leicht zu übersehen. Laut aktueller Doku soll das Attribut data-off-canvas-tabs="true"
statt des deprecated data-offcanvas-tabs="true"
verwendet werden (beachte den feinen Unterschied des einzelnen Bindestriches). Der „alte“ Core (6.5) prüft nur auf das alte, der neue (Shopware 6.6) nur auf das neue Attribut. Eine maximal abwärtskompatible Lösung müsste daher folgendermaßen aussehen:
<a
class="nav-link product-detail-tab-navigation-link"
data-bs-toggle="tab"
data-off-canvas-tabs="true" {# new attribute name #}
data-offcanvas-tabs="true" {# deprecated attribute name for backward compatibility #}
Update Ende März 2024: nachdem nun Shopware 6.6 offiziell released wurde, habe ich meinen Testshop aktualisiert, und siehe da: das Plugin funktioniert nicht, Tabs werden nicht angezeigt. Vermutung: es gibt noch weitere nötige Änderungen. Aber wer weiß das schon?
Bei der Suche nach weiteren Breaking Changes fand ich übrigens in der tabs.html.twig
einen weiteren Deprecation-Hinweis für 6.7.0.: {# @deprecated tag:v6.7.0 - File will be removed as it is no longer loaded by default. #}
mit dem Hinweis, das künftig stattdessen cms-element-product-description-reviews.html.twig
zu verwenden ist.
Zusätzliche Herausforderung: falls wir mit JavaScript Event Handler setzen, müssen diese nicht nur im originalen DOM-Fragment funktionieren, sondern auch in der Version, die Shopware scheinbar per JavaScript im Off-Canvas rendert, vgl. offCanvas js events (seit 2020 unbeantwortete Frage) oder besser Im eigenen Plugin Events anderer Plugins empfangen, ebenfalls von 2020 aber vielleicht immer noch hilfreich.
Nach Off-Canvas-Rendering können wir nicht mehr davon ausgehen, dass es unsere Elemente jeweils nur einmal git. Somit verbietet es sich, mit document.getElementById
oder analogen Selektoren zu arbeiten. Also arbeiten wir entweder über die Plugin-Instanz oder iterieren über alles passende, was wir mit getElementsByClassName
finden?
P.S. Ein Fehler ist aufgetreten: Es sind nicht mehr als 3 aufeinanderfolgende Antworten erlaubt. Bitte bearbeite stattdessen deine letzte Antwort oder warte, bis dir jemand antwortet.