Hallo zusammen, als Shopware 5 Einsteiger würde ich mich über Antworten auf folgende Fragen in Bezug auf die Template-Vererbung von Templates, die mit dem Smarty 3 {include} - Statement eingebunden werden, freuen: Wie kann man erreichen, dass das Template im {include}-Statement nicht im Eltern-Theme, sondern im Kind-Theme gesucht wird? Hintergrund: Aus dem Eltern-Theme habe ich einen Block namens „frontend_index_footer“ aus der Datei „index.tpl“ in die entsprechende „index.tpl“ des Kind-Themes kopiert und etwas modifiziert. Er überschreibt somit den geerbten Block aus dem Eltern-Theme. Wie zu erwarten ist, wird mit {include file=„frontend/index/footer.tpl“} das Template „footer.tpl“ des Eltern-Themes eingebunden: {extends file="parent:frontend/index/index.tpl"} {\* Footer \*} {block name="frontend\_index\_footer"} <footer class="footer-main">
{block name="frontend_index_footer_container"}
{include file="frontend/index/footer.tpl"} {* TODO: footer.tpl not overriding *}
{/block}
</footer>{/block}
Nun möchte ich jedoch, dass meine modifizierte Version von „frontend/index/footer.tpl“ eingebunden wird. Also nicht die Version aus dem Eltern-Theme, sondern die aus dem Kind-Theme. Was muss ich tun, um dies zu erreichen? Mein erster Versuch, das Template „footer.tpl“ des Eltern-Themes in die gleiche Ordnerstruktur des Kind-Themes zu kopieren und an den Anfang der Datei {extends file=‚parent:frontend/index/footer.tpl‘} zu schreiben, schlug fehl. Ergebnis: Es wird weiterhin ausschließlich das Template „footer.tpl“ des Eltern-Themes geladen, das Template „footer.tpl“ des Kind-Themes wird ignoriert. Mein zweiter Versuch bestand darin, das Template „footer.tpl“ im Kind-Theme umzubenennen in „my-footer.tpl“ und an den Anfang der Datei {extends file=‚parent:frontend/index/footer.tpl‘} zu schreiben. Entsprechend habe ich die {include}-Anweisung angepasst: {extends file="parent:frontend/index/index.tpl"} {\* Footer \*} {block name="frontend\_index\_footer"} <footer class="footer-main">
{block name="frontend_index_footer_container"}
{include file="frontend/index/my-footer.tpl"}
{/block}
</footer>{/block}
Das hat das Probelm zunächst gelöst. Aber: Ist es wirklich notwendig, das Template umzubenennen? Verstößt dies nicht gegen die Vererbungsrichtlinien? Später wurde ich durch die Umbenennung mit einem Folgeproblem konfrontiert: Nach dem gleichen Prinzip wie oben habe ich aus dem Template „footer.tpl“ des Eltern-Themes den Block namens „frontend_index_footer_menu“ in das Template „my-footer.tpl“ des Kind-Themes kopiert, um die dort enthaltene weitere {include}-Anweisung zu modifizieren. Es soll erreicht werden, dass anstelle von „frontend/index/footer-navigation.tpl“ aus dem Eltern-Theme das modifizierte und nach dem gleichen Prinzip wie oben ebenfalls umbenannte Template ‚frontend/index/my-footer-navigation.tpl‘ aus dem Kind-Theme geladen wird: [code] {extends file=‚parent:frontend/index/footer.tpl‘} {* Footer menu *} {block name=‚frontend_index_footer_menu‘}
{include file=‚frontend/index/my-footer-navigation.tpl‘}
{/block} [/code] Ergebnis: Es wird eine Fehlermeldung ausgegeben, dass ‚frontend/index/my-footer-navigation.tpl‘ nicht gefunden wurde. Die Smarty-Template-Engine sucht das Theme in der Ordnerstruktur des Parent-Themes, nicht jedoch in der Ordnerstruktur des Kind-Themes. Wie wird erreichet, dass ‚frontend/index/my-footer-navigation.tpl‘ aus dem Kind-Theme geladen wird? Gibt es analog zur objektorientierteren Programmierung ein Schlüsselwort wie „this“ mit einem Zeiger zum eigenen Objekt, also beispielsweise: {include file=‚this:frontend/index/my-footer-navigation.tpl‘}? Vielen Dank für jede Hilfe!