wie frontend_index_header_javascript_inline updatesicher aufbauen?

Hi,

bin neu in der shopware-welt und versuche mich noch an der Smarty-Logik mit den Block.

Ich möchte gerne den „frontend_index_header_javascript“ block in der index.tpl überlagern. Also nicht append oder prepend. Leider verschwindet dann auch der innere Block „frontend_index_header_javascript_inline“. Den kann ich natürlich einfach aus den Bare Template kopieren, aber um mehr Updatekompatibel zu bleiben, hätte ich da gerne den aus „appendet“.

Und das geht nicht. Kann mir jemand erklären warum ?
Hier meine Versuche:

{block name="frontend_index_header_javascript"}
	
		alert(1);
		{block name="frontend_index_header_javascript_inline" append}
			alert(2);
		{/block}
	

	{if $theme.additionalJsLibraries}
		{$theme.additionalJsLibraries}
	{/if}
{/block}

Script Tag ist sauber geschrieben, wird nur hier im Forum umgewandelt.

Alert 1 wird angezeigt, Alert 2 nicht. Dementsprechend auch nicht im finalen generierten Code enthalten.

Habe append entfernt und alert(2) ersetzt durch { $ smarty.block.parent} mit dem ergebnis, das ich den kompletten „frontend_index_header_javascript“ im Inline habe.

block.parent bezieht sich also nicht auf den inneren Block, sondern auf den gesamten.

Die einzige Möglichkeit die header_javascript zu überlagern habe ich nur, wenn ich den kompletten inneren Block mitkopiere, was aber doof ist, fals sich im Bare Template was an den nicht unerheblichen javascript_inline was ändert.

Hab ich was übersehen, oder kann man innere Blöcke nicht überlagern, wenn man den äußeren Block ändern möchte?

Vieleicht kann mir ja da jemand helfen.

gruß
Martin

PS: Rechtschreibfehler bitte ignorieren, bin neu im Forum und schreibe den Text nicht gerade zum ersten mal :frowning:

hm, keiner eine Idee?

hallo daMardl,

probieren Sie mal

{block name="frontend_index_header_javascript"}
    
     // Your Custom Code
     alert(1);
    
	{$smarty.block.parent}
{/block}

{block name="frontend_index_header_javascript_inline" append}
		alert(2);
{/block}

Viele Grüße,

Ahmad.

Hallo,

kurz: Nein. Wenn ein äußerer Block überschrieben wird, sind die inneren Blöcke nicht mehr ansprechbar. Man muss diese dann selbst implementieren.

Das {$smarty.block.parent} bezieht sich immer auf den Eltern-Block innerhalb der Vererbung und nicht in der Code-Struktur.

Die andere Frage wäre, warum musst Du den Block komplett überschreiben?

LG,
Phil

 

Danke für eure beiden Antworten. Im Grunde geht es nicht.

Ich versteh nicht warum in den Block “frontend_index_header_javascript” ein CDATA drin ist und ich wollte das Entfernen. Aber das geht halt nur wenn ich alles überschreibe.

        //<![CDATA[</code></pre>

<p>Es macht halt keinen Sinn (außer in reinen XML-Dateien). Über Sinn oder Unsinn gehts mir da jetzt garnicht. Zumindest verstehe ich jetzt besser, wie die Blöcke und derren Verschachtelung funktioniert.</p>

<p>Vielen dank dafür.</p>

<p>Gruß<br />
Martin</p>

<p> </p>

<p> </p>

<p> </p>

<p> </p>

Hallo zusammen,

falls mal wer darüber stolpert ich hab es selber gelöst, nach dem ich mich näher mit „capture“ in smarty beschäftigt habe und ein ähnliches Problem im Warenkorb hatte.

Hier die Erklärung für den Warenkorb: https://forum.shopware.com/discussion/comment/200129/#Comment_200129

Und jetzt der Code, wie ich das CDATA rausbekomme und updatesicher in den Unterblöcken bleibe.

{block name='frontend_index_header_javascript_inline'}
    {capture name="javascript_inline"}
        {$smarty.block.parent}
    {/capture}
{/block}

{block name="frontend_index_header_javascript"}
    {capture name="saveHeaderJavascriptBlock"}
        {$smarty.block.parent}
    {/capture}
    
        {$smarty.capture.javascript_inline}
    

    {if $theme.additionalJsLibraries}
        {$theme.additionalJsLibraries}
    {/if}
{/block}

Im Grunde nur ein Beispiel, wie man Hauptblöcke ändern kann, ohne die Unterblöcke zu „kopieren“ und die updatesicherheit der Unterblöcke zu verlieren.

Gruß
daMardl