Reihenfolge von Template-Erweiterungen
Wenn du ein Template mit hw_extends erweiterst, erstellt hostware einen Baum aus allen Quellen, die dieses Template ebenfalls definieren, und durchläuft den Baum anschließend in einer festgelegten Prioritätsreihenfolge, um zu bestimmen, welche Version verwendet wird.
{% hw_extends 'storefront::home.twig' %}Angenommen, ein Modul und ein Theme definieren beide ein home.twig, das die Startseite des Storefronts erweitert:
custom/
├── modules/
│ └── DashservVps/
│ └── src/resources/views/home.twig
└── themes/
└── hw/
└── evolution/
└── resources/views/home.twigWährend der Kompilierung sammelt hostware jedes Template mit diesem logischen Pfad in einem unsortierten, nach Namespace strukturierten Baum:
[
"storefront" => "resources/views/storefront/home.twig",
"dashservvps" => "custom/modules/DashservVps/src/resources/views/home.twig",
"theme.evolution" => "custom/themes/hw/evolution/resources/views/storefront/home.twig",
]Der Template-Finder sortiert den Baum anschließend nach Priorität:
Themes
Modules
Hostware core (
storefront::)
Die Version des Themes wird zuerst gerendert. Nicht ausgefüllte Blöcke werden anschließend an die Module-Ebene weitergereicht, und nur Blöcke, die niemand ersetzt hat, erreichen schließlich das Storefront core. Dadurch funktionieren partielle Überschreibungen eines Themes ohne zusätzliche Verdrahtung einfach so.
hw_include folgt derselben Reihenfolge
Das Tag include hat mit hw_include ein hostware-Gegenstück, das exakt dieselbe Kette aus drei Quellen durchläuft. Wenn ein Core-Template also eine Komponente mit hw_include 'storefront::component/product/card.twig' einbindet, ersetzt ein Theme, das eine eigene card.twig am passenden Pfad bereitstellt, die Komponente überall dort, wo sie eingebunden wird – ohne dass du auch das übergeordnete Template überschreiben musst.
Praktische Auswirkungen
Die Datei eines Themes hat am selben Pfad immer Vorrang vor der Datei eines Moduls. Wenn die Änderungen deines Themes ignoriert werden, überprüfe, ob ein Modul nicht eine Version desselben Templates bereitstellt, in der dein Block fehlt.
Modules erweitern das Storefront auf dieselbe Weise wie Themes. Ein Theme, das auf einem Modul aufbaut, überschreibt daher weiterhin dessen Templates.
Nur Twig blocks auf der Root-Ebene einer Datei werden überschrieben. Verschachtelte Blöcke befinden sich innerhalb ihres übergeordneten Blocks und werden nur erreicht, wenn dieser übergeordnete Block nicht selbst überschrieben wurde.