Frage zur Anpassung von Blöcken

Hallo,

hier: Getting started with Shopware templating habe ich gelernt, dass man Blöcke einzeln anpassen kann, indem man eine entsprechende “Ersatzdatei” ins passende Verzeichnis des eigenen Themes ablegt. Ich möchte bspw. den Kategoriebeschreibungsbereich aus dem mittleren Inhaltsbereich heraus und direkt über alle Inhalte verschieben. Also habe ich mir die frontend/listing/index.tpl geschnappt, weil dort im Block frontend_listing_index_text eben jene Inhalte eingebunden werden. Diesen Block möchte ich in der listing/index.tpl nun quasi leeren, weil es ja ausgeblendet werden soll.

Mein Versuch in meiner frontend/listing/index.tpl:

{extends file="frontend/listing/index.tpl"}

{block name="frontend_index_content"}
	{block name="frontend_listing_index_text"}{/block}
	{$smarty.block.parent}
{/block}

Das klappt aber nicht. Nach dem Kompilieren (inkl. Cachelöschung) schau ich mir das Frontend an und ich sehe nur: “Ups! Ein Fehler ist aufgetreten!”.
Ein Blicks ins Systemlog von Shopware offenbart folgende Meldung:

Syntax Error in template "/var/www/serverpfad/themes/Frontend/TEMPLATE/frontend/listing/index.tpl" on line 2 "" illegal recursive call of "frontend/listing/index.tpl"

Also habe ich falsch extended?

Testweise habe ich mal versucht direkt die frontend/index/index.tpl zu extenden. Also:

{extends file="frontend/index/index.tpl"}

{block name="frontend_index_content"}
	{block name="frontend_listing_index_text"}{/block}
	{$smarty.block.parent}
{/block}

Aber wenn ich das mache, bleibt der gesamte Inhaltsbereich leer! Ich hatte das so verstanden, dass $smarty.block.parent den Rest des Blocks noch einfügt. Warum das nun bei mir leer bleibt, ist mir ein Rätsel. Ich schätze irgendwas habe ich nich kapiert. Vielleicht kann mir jemand einen netten Tipp geben? :wink:

 

 

Der smarty.block.parent muss in den _text block ?

{extends file="frontend/listing/index.tpl"}

{block name="frontend_index_content"}
	{block name="frontend_listing_index_text"}
	{$smarty.block.parent}
	{/block}
{/block}

 

 

@kulli schrieb:

Der smarty.block.parent muss in den _text block ?

{extends file=„frontend/listing/index.tpl“}

{block name=„frontend_index_content“}
{block name=„frontend_listing_index_text“}
{$smarty.block.parent}
{/block}
{/block}

 

 

…das kapier ich nich. Wieso in den Textblock? Der Textblock ist es ja gerade, den ich leeren will. Das was sonst noch danach kommt, soll weiterhin eingebunden bleiben. 

Hallo,

dann nur den zu leerenden Block in Deine Template-Datei eintragen. Nicht den übergeordneten Block.

{extends file="frontend/listing/index.tpl"}

{block name="frontend_listing_index_text"}
{/block}

 

1 Like

Beim „extends“ fehlt auch schon  parent:
Ansonsten ist das obige wohl eher Mumpitz. Ich kann nicht einen Block Überschreiben, in den ich darin einen Unterblock „leere“ um dann wieder denn original-Block zu includen.
Drakon hat Recht.

Zunächst einmal Danke an euch alle!

Also das parent hatte ich echt übersehen, danke für den Tipp.

ABER: @sonic‍ - wieso kann ich einen Block an „einer“ Stelle nicht entfernen, um ihn an „anderer“ Stelle erneut einzufügen? Ich will den Kategoriebeschreibungsblock ja nicht komplett killen sondern nur an eine andere Stelle verschieben. In meinem Fall soll der Kategoriebeschreibungsblock über dem Inhalt platziert werden, d.h. über Sidebars und Contentbereich. Deshalb will ich den aus dem Listing entfernen und im übergeordneten index.tpl - im Block frontend_index_content_top - einfügen.

Wenn ich jetzt - gemäß @drakon‍ - nur den Block frontend_listing_index_text verwende - also leere - dann wird dieser Block komplett und definitiv gekillt - und zwar überall. Erscheint mir in dem Sinne sogar logisch. :wink: Ich möchte den Inhalt des Blockes aber durchaus verwenden - nur eben eine Blockebene weiter oben.

Wenn ich also nicht einfach leeren - und anderswo einfügen kann - hieße das ja, ich müsste den Inhalt der text.tpl manuell in meine frontend/index/index.tpl in den Block frontend_index_content_top einfügen. Oder?

Ich habe mir jetzt obigen Code nicht im Originaltheme angeguckt aber:
Nehmen wir mal an, Du hast „{block aaa} {block bbb}Laber Rababer{/block} Noch mehr Inhalt{/block}“
Jetzt verstehe ich das so: Du möchtest „Laber Rababer“ löschen - und setzt innerhalb vom „Block aaa“ den „Block bbb“ leer.
Soweit so schlecht: Denn Du änderst oben „Block aaa“ - darin erzeugst Du zwar einen leeren „Block bbb“, fügst aber anschliessend mit smarty.block.parent wieder den Inhalt vom übergeordneten original „Block aaa“ ein, und damit wieder „Block bbb“ - was nun ganz übel wird, weil nun „Block bbb“ doppelt vorhanden ist - einmal leer und einmal mit Original-Inhalt.

Richtig wäre: Nur „Block bbb“ ohne Inhalt zu überschreiben, und an „neuer Stelle“ den Inhalt aus „Block bbb“ einzusetzen - dann aber mit neuem Block-Namen.
Willst Du den Block-Namen aber an anderer Stelle behalten, musst Du „Block aaa“ KOMPLETT kopieren und den „Block bbb“ samt inhalt weglassen. Also das, was Du grad im letzten Absatz fragst  Wink

1 Like

@sonic schrieb:

Ich habe mir jetzt obigen Code nicht im Originaltheme angeguckt aber:
Nehmen wir mal an, Du hast „{block aaa} {block bbb}Laber Rababer{/block} Noch mehr Inhalt{/block}“
Jetzt verstehe ich das so: Du möchtest „Laber Rababer“ löschen - und setzt innerhalb vom „Block aaa“ den „Block bbb“ leer.
Soweit so schlecht: Denn Du änderst oben „Block aaa“ - darin erzeugst Du zwar einen leeren „Block bbb“, fügst aber anschliessend mit smarty.block.parent wieder den Inhalt vom übergeordneten original „Block aaa“ ein, und damit wieder „Block bbb“ - was nun ganz übel wird, weil nun „Block bbb“ doppelt vorhanden ist - einmal leer und einmal mit Original-Inhalt.

Richtig wäre: Nur „Block bbb“ ohne Inhalt zu überschreiben, und an „neuer Stelle“ den Inhalt aus „Block bbb“ einzusetzen - dann aber mit neuem Block-Namen.
Willst Du den Block-Namen aber an anderer Stelle behalten, musst Du „Block aaa“ KOMPLETT kopieren und den „Block bbb“ samt inhalt weglassen. Also das, was Du grad im letzten Absatz fragst  Wink

Hm… aber ist das nicht ziemlich update-unsicher? 

Nö  Wearing-Sunglasses Das System hat da halt seine Grenzen. Blöcke „verschieben“ geht leider nicht ohne „Copy & Paste“

2 Likes