Verständnisfrage zur Nutzung von $smarty.block.parent um Blockinhalt zu manipulieren

Liebe Community,

angenommen ich erweitere die Tabs der Produktdetailseite (frontend/detail/tabs.tpl) um einen weiteren Tab und entsprechend Inhalt.

Beispiel für das Setzen meines Inhalts an die erste Stelle des ersten Reiters:

{extends file="parent:frontend/detail/tabs.tpl}

{* Tab Content *}
{block name="frontend_detail_tabs_content_inner"}
  
  {* meinCustomContent *}
  {file include="frontend/detail/meinCustomContent.tpl}
  
  {$smarty.block.parent}
{/block}

Das habe ich auch soweit verstanden und es funktioniert (dazu gibt es ja auch entsprechende Tutorials)

Nun möchte der Kunde seinen „CustomContent“ aber zwischen den beiden voreingestellten Tabs „Beschreibung“ und „Bewertungen“ haben. 
Ich ging davon aus, das würde funktionieren:
 

{* Tab Content *}
{block name="frontend_detail_tabs_content_inner"}

  {* Description container *}
  {block name="frontend_detail_tabs_content_description"}
    {$smarty.block.parent}
  {/block}

  {* meinCustomContent container *}
  {file include="frontend/detail/meinCustomContent.tpl}

  {* Rating container *}
  {block name="frontend_detail_tabs_content_rating"}
    {$smarty.block.parent}
  {/block}

{/block}

 

Dann erscheinen die div-container „tab–container“ doppelt im Quelltext. Die Zuordnung des Inhalts zu den Reitern stimmt dadurch auch nicht mehr.
Es funktioniert nur, wenn man den ganzen Code aus den nötigen Blöcken des Bares zwischen die Blöcke meiner Templatedatei (wo jetzt das $smarty.block.parent steht) einfügt.
Ich dachte, man könne $smarty.block.parent verwenden, um eben nicht den ganzen Code hineinkopieren zu müssen. Als ein Verweis auf den Inhalt des Blocks aus dem Bare, damit es updatesicher bleibt etc.

PS: Ich habe kein Plugin gefunden, das zufällig auch genau diese Blöcke versucht anzusprechen.

 

Wer kann mich aufklären?^^
 

Kurz und knapp: So nicht  Wink
Du kannst nicht einen Block überschreiben und die darin enthaltenen Unter-Blöcke wieder includen.
Du includest zwei mal den parentblock gekapselt mit jeweils einer neuen Definition der Unterblöcke --> falsch.
smarty.block.parent gibt den ganzen Parentblock aus.
Wenn Du also etwas zwischen diese beiden Blöcke setzt, wählst Du EINEN von beiden aus und setzt deinen Inhalt HINTER smarty.block.parent IN “frontend_detail_tabs_content_description” ODER VOR smarty.block.parent IN “frontend_detail_tabs_content_rating”. Den “Übergeordneten” Block “frontend_detail_tabs_content_inner” gibts Du dann nicht an, da Du den ja nicht änderst.

Edit: Also so denken: Ich setzte meinen Inhalt nicht ZWISCHEN zwei Blöcke, sondern am ENDE oder ANFANG einer der beiden Blöcke.

Vielen Dank für die schnelle Antwort!

Ok, das würde funktionieren, geb ich dir recht. Der Übersicht halber fänd ich es nur schöner, es „dazwischen“ zu schreiben und somit den von mir gewünschten Block zu erweitern.

$smarty.block.parent bezieht sich in diesem Fall also auf „frontend_detail_tabs_content_inner“, richtig?

Falls das so ist, macht es natürlich keinen Sinn, was ich da mache. Ich dachte, $smarty.block.parent bezieht sich immer nur auf den Block, in dem es drin steht. Gibt es dafür denn keine Lösung? Wie zum Beispiel $smarty.block.child?^^ Hab das gerade mal spaßeshalber ausprobiert, hat aber nicht funktioniert.

Da sind schon einige drüber gestolpert - musste ich auch erst verstehen  Wink
Der “erste” Block zählt, alles was darin kommt, “überschreibt” den Block, und “parent” ist der Originalinhalt, der wieder eingefügt wird. 
Mir ist auch kein anderer Weg bekannt - immer auf der untersten Ebene arbeiten, was Blöcke betrifft.
Wieder Unteblöcke “rauspicken” geht (leider) nicht.
Du musst halt immer so denken: Ich will nichts zwischen Etwas  setzen, sondern hinter oder vor  Etwas - dann geht es gut mit smarty  Wearing-Sunglasses
 

2 „Gefällt mir“

Vielen Dank für deine ausführliche Erklärung und deine Zeit! Hat mich echt gefreut =D

Und hab auch noch gut was dazugelernt^^ Danke!

Einen schönen sonnigen Freitag noch :wink:

1 „Gefällt mir“

Gibt es denn keine andere Möglichkeit die Positionierung der Blocks zu beeinflussen ohne alle anderen Blocks auf der selben Ebene aus dem Bare-Theme zu kopieren und im eigenen Theme wieder einzufügen? Bei Magento gibt es beispielsweise die Möglichkeit mit before="" oder after="" die Positionierung zu beeinflussen. Das macht den Code deutlich lesbarer. Oder gibt es keine anderen Möglichkeit als, um beim oberen Beispiel zu bleiben, die Blöcke “frontend_detail_tabs_content_description” und “frontend_detail_tabs_content_rating” aus dem Bare-Theme im eigenen Theme einzufügen?