Theme template inheritance - Vererbungsreihenfolge

Laut dieser Doku https://docs.shopware.com/en/shopware-platform-dev-en/internals/plugins/plugin-themes?category=shopware-platform-dev-en/internals/plugins#theme-template-inheritance

kann die Reihenfolge der Vererbung in der theme.json festgelegt werden.

 

MEIN ZIEL: Storefront > Mein Theme > Plugins
Eben gau so, wie das in Shopware 5 möglich war, damit Plugins aus dem Store im Theme wirken können.

 

theme.json

"views": [
        "@Storefront",
        "@MyTheme",
        "@Plugins"
    ],

@MyTheme habe ich durch den Namen meines Themes ausgetauscht.

 

Im Theme bearbeite ich die base.html.twig

{% sw_extends '@Storefront/storefront/base.html.twig' %}

{% block base_header %}
    
        {% block base_header_inner %}
            FOOOOOOOOO
        {% endblock %}
    
{% endblock %}

 

In einem Plugin bearbeite ich ebenfalls die base.html.twig

{% sw_extends '@Storefront/storefront/base.html.twig' %}

{% block base_header %}
    BAAAAAAAAAR

    {{ parent() }}
{% endblock %}

 

ERGEBNIS : Die Überarbeitung aus dem Plugin greift nicht. Sie greift erst, wenn ich im Theme in der base.html.twig ebenfalls {{ parent() }} einfüge.

{% sw_extends '@Storefront/storefront/base.html.twig' %}

{% block base_header %}
    {{ parent() }}

    
        {% block base_header_inner %}
            FOOOOOOOOO
        {% endblock %}
    
{% endblock %}

ERGEBNIS : Zwei mal der selbe Header + Inhalt des Plugins.

Ich habe folgendes herausgefunden: 

Plugin A und Plugin B überschreiben den Block {% block base_header %}, welcher im Theme bereits verändert wurde.

 

die theme.json sieht so aus:

"views": [
    "@Storefront",
    "@MyTheme",
    "@Plugins"
],

Plugin A habe ich vor dem Theme installiert
Danach habe ich das Theme installiert
Plugin B habe ich nach dem Theme installiert

Leere ich nun den Cache mit bin/console cache:clear erscheint Plugin B
Leere ich den Cache mit ./psh.phar cache erscheint Plugin A

 

Ich habe das nun auch mit 

"views": [
    "@Storefront",
    "@Plugins",
    "@MyTheme"
],

getestet. Die Reihenfolge spielt keine Rolle… Auch ist mir nicht klar, ob es @MyTheme heißen soll, oder ob es ein Platzhalter ist und man dieses gegen den Namen des eigenen Theme Plugins austauschen muss… 

 

[@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski „Moritz Naczenski“)‍ Kann das irgendwer bei euch mal prüfen oder erklären was ich alles hier falsch mache?

 

Getestet mit der aktuellsten v6.1.9 Stable Version 999999.9999999 

Also ich bin mir ziemlich sicher, dass bei @ dein Theme-Name hingehört, damit es funktioniert.

1 Like

[@Moritz Naczenski](http://forum.shopware.com/profile/14574/Moritz Naczenski „Moritz Naczenski“)‍ Danke für die abendliche Antwort  Thumb-Up

 

Theme Name aus der theme.json 

oder

Name des Plugins aus der composer.json?

 

Ich habe beides getestet…

 

Es bleibt dennoch dabei, dass die Installations-Reihenfolge darüber entscheidet, welche Templates letztlich überschreiben… abhängig vom gewählten Cache-Leeren Befehl… 

Gerade bei mir auch getestet, bei mir tut folgendes auch nicht

„views“: [

@Storefront“,

@SwagCmsExtensions“,

@Plugins“,

@Theme

]

SwagCmsExtensions überschreibt mir immer noch meine Theme

@Moritz Naczenski schrieb:

Also ich bin mir ziemlich sicher, dass bei @ dein Theme-Name hingehört, damit es funktioniert.

:D 

 Was die art des cache löschens angeht, ist das Problem bekannt und wird gerade gefixed.

Bis dahin liefert nur ./psh.phar cache das richtige Ergebnis.

rufen Plugin A und Plugin B jeweils parent() auf?

@mdsw schrieb:

Ich habe folgendes herausgefunden: 

Plugin A und Plugin B überschreiben den Block {% block base_header %}, welcher im Theme bereits verändert wurde.

@StefanSl schrieb:

 Was die art des cache löschens angeht, ist das Problem bekannt und wird gerade gefixed.

https://issues.shopware.com/issues/NEXT-6646

Bis dahin liefert nur ./psh.phar cache das richtige Ergebnis.

rufen Plugin A und Plugin B jeweils parent() auf?

@mdsw schrieb:

Ich habe folgendes herausgefunden: 

Plugin A und Plugin B überschreiben den Block {% block base_header %}, welcher im Theme bereits verändert wurde.

Jepp