aber diese Block-Erweiterung (auch direkt Überschreiben geht nicht) klappt einfach nicht… auch nicht nach diversen cache:refresh, theme:compile oder sonst was…
müsste ich MyTheme und Plugins also tauschen? Dann bin ich halt nicht mehr fähig, Drittanbieter-Plugins zu modifizieren, weil mir dort was nicht passt…
wie ist denn eigentlich die Reihenfolge der Vererbung dort? Von unten nach oben oder oben nach unten? _Storefront -> Plugins -> MyTheme? _Dann hätte natürlich MyTheme immer Recht und ein Plugin könnte niemals ein Theme überschreiben… Blödsinn irgendwie… wie macht das dann zB PayPal? Ist ja auch nicht extra aufgeführt.
EDIT: hab jetzt mein Plugin dort auch mal aufgeführt
jetzt seh ich im Frontend aber nur noch den Inhalt vom Plugin-Block, obwohl dort {{ parent }} drin steht … ganz egal ob ich @Parent oder @Storefront nutze…
aber es kann ja eigentlich nicht Sinn der Sache sein, dass man dort Plugins aufführen muss. Eigentlich muss doch automatisch jedes Plugin Blöcke aus dem aktuell gewählten Theme erweitern können oder nicht?
EDIT 2: Wenn ich @MyPlugin in der theme.json nutze, dann erscheint der Block aus dem Plugin zumindest an der Stelle, wo ich ihn im Theme hinzugefügt hab. Der Block an sich scheint sich also zu vererben. Jedoch klappt das mit {{ parent }} offenbar nicht im Plugin … es wird immer nur der eigene Inhalt gezeigt, nicht beide zusammen…
Das ist genau so wie in SW5 auch - du definierst die Vererbungsreihenfolge.
Das Default ist aktuell “Theme kommt als letztes”, heißt dein Plugin wird vom Theme überschrieben. Wenn du es andersrum heben willst musst du imho @plugin und @mytheme tauschen. In SW5 kannst du ja auch definieren, wer der letzte in der Kette ist. Das ist also erstmal korrekt.
Was ist denn nun der konkrete Fehler, wenn du die beiden in der theme.json miteinander tauschst.
aber ich konnte doch in SW5 jederzeit in einem Plugin einen Block erweitern und dann im Theme nochmal, oder etwa nicht? Dafür gibts ja die Vererbung und Parent.
damit nur @MyPlugin mein Theme überschreibt, nicht aber die anderen Plugins. Der „Parent“ von MyPlugin müsste dementsprechend MyTheme sein, oder nicht?
Das heißt, wenn ich den Block an beiden Stellen erweitere und {{ parent }} verwende, müsste zuerst der Inhalt von MyTheme angezeigt werden und dann der Inhalt von MyPlugin. Oder nicht?
Aktuell ist es so, dass nur der Inhalt von MyPlugin sichtbar ist… weil das {{ parent }} offenbar nicht den Inhalt von MyTheme einbindet.
Meiner Meinung nach müsste das aber auch funktionieren, ohne dass ich die Reihenfolge in theme.json verändere… eben über {{parent}}… Dann kommt eben zuerst der Inhalt von MyPlugin und dann der Inhalt von MyTheme … aber das klappt eben nicht.
Wenn ich das @MyPlugin in der theme.json weglasse, dann wäre doch @Plugins der Parent von @MyTheme, richtig? Folglich sollte wenn ich im @MyTheme mit {{parent}} arbeite, auch der Inhalt vom Plugin sichtbar sein… ist er aber nicht
aber ich konnte doch in SW5 jederzeit in einem Plugin einen Block erweitern und dann im Theme nochmal, oder etwa nicht? Dafür gibts ja die Vererbung und Parent.
Nur wenn du die Template inheritance richtig definiert hast. Du konntest es auch so machen, dass ein Plugin niemals dein eigenes Theme überschreiben konnte. Stichwort „Injectbeforeplugins“.
Storefront
MyTheme
Plugins
Müsste heißen: Mit „MyTheme“ kannst du nur Themes aus „Storefront“ (parent) überschreiben und Plugins können „MyTheme“ und „Storefront“ überschreiben.
Storefront
Plugins
MyTheme
heißt: Mit „Plugins“ kann ich nur „Storefront“ (parent) überschreiben, nicht „MyTheme“. Mit „MyTheme“ kann ich „Plugins“ (parent) und Storefront (parent) überschreiben.
Ich glaube am einfachsten ist es, wenn du einfach mal ein Beispiel erzeugst:
Theme was genau eine Datei überschreibt/erweitert
Plugin was genau eine Datei überschreibt/erweitert aus Theme
Dann kann das auch jeder lokal nachvollziehen ohne sich da groß einarbeiten zu müssen.
es müsste doch also mein Plugin den Block „test“ aus dem Theme erweitern oder? Durch den Einsatz von {{ parent }} sollte der Inhalt vom Theme kommen und durch „Wo bist du?“ ergänzt werden. Die Ausgabe sollte also lauten: „Hallo Welt! Wo bist du?“
Die Ausgabe lautet aber „Wo bist du?“.
heißt für mich: {{ parent }} macht nicht das was es soll… ?
“hochvoten” bringt bei shopware 6 nix - da sind so viele elementare grundfunktionen offen (artikel kopieren, bestellungen löschen) das sowas eher das kleinste problem ist. bedenke: du benutzt eine shopware 6 beta"stable" - produktiv vielleicht einsetzbar mit standard shop funktionen 2023 - falls du bis dahin nicht (hoffentlich) genervt aufgegeben hast und zu einem funktionalen system mit standard funktionen gewechselt bist.
die geschichte wiederholt sich halt - den gleichen gau konnte man bei magento 1 auf 2 und auch xt:commerce sehen.
keine innovation / brauchbare plattform = und die geschichte wird sich auch hier wiederholen.
das von BenjaminHa beschriebene Verhalten hängt damit zusammen, dass Themes momentan nicht von “views” berücksichtigt werden, wenn sie nicht aktiv dem aktuellen Verkaufskanal zugewiesen sind. Damit verschiedenen Verkaufskanälen verschiedene Themes zugewiesen werden können, liegt hier aktuell eine “Trennung” vor. Diese Trennung wurde ursprünglich implementiert um zu verhindern, dass Themes ungewünschte Template-Änderungen aus einem anderen Theme eines anderen Verkaufskanals haben. Das wollen wir aber überarbeiten und dafür sorgen, dass die theme.json immer berücksichtigt wird und sozusagen “immer gewinnt”. Auch wenn Themes die dort gesetzt werden gerade gar nicht aktiv bzw. einem Verkaufskanal zugewiesen sind: https://issues.shopware.com/issues/NEXT-7344
Für den Moment könnt ihr als Workaround eure “Basis Theme” Template-Anpassungen in ein reguläres Plugin kopieren und das “Custom Theme” darauf aufbauen: