Index-Struktur ändern ohne innere Block-Inhalte zu kopieren

Ich möchte das Index-Template (frontend/index/index.tpl) ableiten, um darin verwendete Blöcke anders anzuordnen. D.h. ich möchte die Blöcke selbst nicht ändern, sondern lediglich Blöcke verschieben und den umgebenden HTML-Code etwas anpassen. Dazu möchte ich so wenig bestehenden Code wie möglich kopieren, sondern möglichst abgeleitet weiternutzen (Stichwort Update-Sicherheit). Das scheint nur nicht so zu klappen, wie ich mir das wünsche. Hier der Code: [code]{extends file=“parent:frontend/index/index.tpl”} {block name=‘frontend_index_navigation’}

{block name=‘frontend_index_logo’}{$smarty.block.parent}{/block}

{block name=‘frontend_index_checkout_actions’}{$smarty.block.parent}{/block}

{block name=‘frontend_index_search’}{$smarty.block.parent}{/block}

{block name=‘frontend_index_navigation_categories_top’}{$smarty.block.parent}{/block} {/block}[/code]Wie man sieht, möchte ich u.a. einfach den Block frontend_index_logo aus dem Eltern-Template wiedernutzen. Nur leider scheint sich $smarty.block.parent nicht auf den unmittelbar umschließenden Block zu beziehen, sondern auf den äußersten definierten Block frontend_index_navigation. Das führt dazu, dass nicht der jeweilige Blockinhalt ausgegeben wird, sondern immer wieder der Hauptblock. Die Frage ist nun: Wie kann ich Teile der Index-Struktur ändern, ohne die inneren Blöcke neu definieren und damit Code unnötig duplizieren zu müssen?

Hallo, leider kann man in einer Vererbungsdatei welche von einer anderen Datei ableitet immer nur auf einzelne Blöcke zugreifen. Ineinander verschachtelte Blöcke lassen sich so leider nicht direkt verschieben. Man müsste dann den Inhalt der Blöcke statisch übernehmen. Wenn Du die Blöcke verschieben aber auch die Updatefähigkeit der Blöcke erhalten möchtest, kannst Du die Datei ohne den {extends} Befehl einfach überschreiben und die Blöcke dann frei sortieren. Dadurch wird die eigentliche Datei überschrieben und die Blöcke neu definiert, wodurch andere Templates und Plugins weiterhin an den Blöcken ansetzen können. Sonnige Grüße, Phil

Die Inhalte innerer Blöcke müssen nicht statisch übernommen werden. Es reicht wenn man die Blöcke anlegt und darin dann mit {$smarty.block.parent} dann den Inhalt aus dem geeerbten Block des Vatertemplates holt.

Wie gesagt, mit {$smarty.block.parent} kann zwar der Inhalt des direkt vererbten Blocks übernommen werden, hier war aber die Rede von verschachtelten Blocks. Es ging darum die Reihenfolge von innerliegenden Blöcken innerhalb eines äußeren Blocks zu verändern und dabei den Inhalt der einzelnen Blöcke zu übernehmen. Ich denke hier wird der Begriff “Parent” oft falsch verstanden, denn hier gilt es zwischen Codehierarchie und Vererbungshierarchie zu unterscheiden.

Beitrag gelöscht!