Tpl erweitern dupliziert Content

Ich stehe grad etwas auf dem Schlauch.

Ich versuche das tpl order_item_details.tpl in frontend/account zu erweitern.

Die Stelle die ich tauschen/ anpassen möchte ist der Bereich wo Bestelldatum, Bestellnummer, Versandart, Versandkosten etc stehen.
Ich habe also alle Blöcke aus dem tpl entfernt, nur diese drin gelassen und darüber {$smarty.block.parent} geschrieben.
Dennoch habe ich meinen Part den ich gerne anpassen möchte nun doppelt.
Hier einmal wie meine Datei aktuell aussieht:

{extends file='parent:frontend/account/order_item_details.tpl'}
{namespace name="frontend/account/order_item"}

<div id="order{$offerPosition.ordernumber}" class="order--details panel--table">

{block name="frontend_account_order_item_detail_table"}
    <div class="panel--tr is--odd">
     {$smarty.block.parent}
        {block name="frontend_account_order_item_detail_info_wrapper"}
            <div class="column--info-wrapper">
                {block name="frontend_account_order_item_detail_info_labels"}
                    <div class="panel--td column--info-labels">
                        {* Order date label *}
                        {block name="frontend_account_order_item_label_date"}
                            <p class="is--strong">{s name="OrderItemColumnDate"}{/s}</p>
                        {/block}

                        {* Order number label *}
                        {block name="frontend_account_order_item_label_ordernumber"}
                            <p class="is--strong">{s name="OrderItemColumnId"}{/s}</p>
                        {/block}

                        {* Shipping method label  *}
                        {block name="frontend_account_order_item_label_dispatch"}
                            {if $offerPosition.dispatch}
                                <p class="is--strong">{s name="OrderItemColumnDispatch"}{/s}</p>
                            {/if}
                        {/block}

                        {* Package tracking code label *}
                        {block name="frontend_account_order_item_label_trackingcode"}
                            {if $offerPosition.trackingcode}
                                <p class="is--strong">{s name="OrderItemColumnTracking"}{/s}</p>
                            {/if}
                        {/block}
                    </div>
                {/block}

                {block name="frontend_account_order_item_detail_info_data"}
                    <div class="panel--td column--info-data">
                        {* Order date *}
                        {block name='frontend_account_order_item_date'}
                            <p>{$offerPosition.datum|date}</p>
                        {/block}

                        {* Order number *}
                        {block name='frontend_account_order_item_ordernumber'}
                            <p>{$offerPosition.ordernumber}</p>
                        {/block}

                        {* Shipping method *}
                        {block name='frontend_account_order_item_dispatch'}
                            {if $offerPosition.dispatch}
                                <p>{$offerPosition.dispatch.name}</p>
                            {/if}
                        {/block}

                        {* Package tracking code *}
                        {block name='frontend_account_order_item_trackingcode'}
                            {if $offerPosition.trackingcode}
                                <p>
                                    {if $offerPosition.dispatch.status_link}
                                        <a href="{$offerPosition.dispatch.status_link}"
                                           title="{$offerPosition.dispatch.name}"
                                           onclick="return !window.open(this.href, 'popup', 'width=500,height=600,left=20,top=20');"
                                           target="_blank">{$offerPosition.trackingcode}</a>
                                    {else}
                                        {$offerPosition.trackingcode}
                                    {/if}
                                </p>
                            {/if}
                        {/block}
                    </div>
                {/block}
            </div>
        {/block}

        {block name="frontend_account_order_item_detail_summary_labels"}
            <div class="panel--td column--summary-labels">

                {* Shipping costs label *}
                {block name="frontend_account_order_item_detail_shipping_costs_label"}
                    <p class="is--strong">{s name="OrderItemShippingcosts"}{/s}</p>
                {/block}

                {block name="frontend_account_order_item_detail_shipping_costs"}
                    {if $offerPosition.taxfree}
                        <p class="is--strong">{s name="OrderItemNetTotal"}{/s}</p>
                    {else}
                        <p class="is--strong">{s name="OrderItemTotal"}{/s}</p>
                    {/if}
                {/block}
            </div>
        {/block}

        {block name="frontend_account_order_item_detail_summary_data"}
            <div class="panel--td column--summary-data">

                {* Shopping costs *}
                {block name="frontend_account_order_item_shippingamount"}
                    <p class="is--strong">
                        {if $offerPosition.currency_position == "32"}
                            {$offerPosition.currency_html} {$offerPosition.invoice_shipping}
                        {else}
                            {$offerPosition.invoice_shipping} {$offerPosition.currency_html}
                        {/if}
                    </p>
                {/block}

                {block name="frontend_acccount_order_item_amount"}
                    {if $offerPosition.taxfree}
                        <p class="is--bold">
                            {if $offerPosition.currency_position == "32"}
                                {$offerPosition.currency_html} {$offerPosition.invoice_amount_net}
                            {else}
                                {$offerPosition.invoice_amount_net} {$offerPosition.currency_html}
                            {/if}
                        </p>
                    {else}
                        <p class="is--bold">
                            {if $offerPosition.currency_position == "32"}
                                {$offerPosition.currency_html} {$offerPosition.invoice_amount}
                            {else}
                                {$offerPosition.invoice_amount} {$offerPosition.currency_html}
                            {/if}
                        </p>
                    {/if}
                {/block}
            </div>
        {/block}
    </div>
{/block}
</div>

Wo muss nun das {$smarty.block.parent} hin? Ich habe es extra in den block rein geschrieben damit auch der Inhalt der oberhalb von dem Versandkostenblock kommt auftaucht.

Zur Übersicht wo was ist:
{$smarty.block.parent} Zeile 8
den Part den ich verändern möchte: Zeile 11-108 (nur teile davon, aber die kann ich nicht weiter reduzieren da die blöcke ja ineinander verschachtelt sind.

Kann mir jemand auf die Sprünge helfen?

Mit {$smarty.block.parent} erweiterst du den bestehenden Block entweder davor oder danach.

Z.b
{block name=„frontend_account_order_item_detail_summary_data“}
{$smarty.block.parent}
dein Änderung werden nach diesem Block ausgeführt
{/block}

{block name=„frontend_account_order_item_detail_summary_data“}
dein Änderung werden vor diesem Block ausgeführt
{$smarty.block.parent}
{/block}

Was genau und wo willst du was hinzufügen?
Mit meinem Beispiel würdest du im Block
{block name=„frontend_account_order_item_detail_info_data“}
nach
{block name=„frontend_account_order_item_detail_summary_data“}
etwas davor oder danach hinzufügen

Im Bare Themen wird das schon ausgegeben und du hast mit
{$smarty.block.parent} im eigenem Themen das ganze erneut hinzugefügt, so das es doppelt ausgegeben wird.

1 Like

Danke. Ich habe {$smarty.block.parent} jetzt komplett weggelassen nach einigen Trial and Error Versuchen.

Eigentlich ist mir die Funktionsweise nämlich klar, mein Gedanke war nur:

Also Beispiel:
Ich will in den Block C verändern, also muss ich auch den Parent block A in mein Template mit rein nehmen und {$smarty.block.parent} verwenden da ich ansonsten den restlichen Inhalt in von Block A entfernen/ überschreibe mit ausschließlich Block C.
Dem war nicht so, die Logik verstehe ich ehrlich gesagt nicht ganz, aber naja jetzt gehts wenn ich alles raus nehme und nur meinen Block so rein schreibe.

A
  B
  C
  D
A

Eigentlich ist mir die Funktionsweise nämlich klar,

Sicher? :relaxed:

Wenn du nur Block C ändern willst, dann musst du auch nur Block C in dein Template übernehmen.
Das „Parent“ bezieht sich nicht auf einen übergeordneten Block sondern auf die Vererbung des jeweiligen Blocks.

Einfach gesagt: {$smarty.block.parent} holt den Inhalt des jeweiligen Blocks aus dem Responsive-Template (= Parent)

1 Like

@skarpeta, nix für ungut, aber das Thema Vererbung bei Smarty solltest Du Dir wirklich nochmals genauer ansehen. Lies Dir bitte mal Template Inheritance | Smarty genau (!) durch. Besonders der zweite Punkt wird oft falsch gemacht - im Kind (sprich: erste Zeile ist ein {extends}) kannst Du AUSSCHLIESSLICH Blöcke des Vaters überschreiben. Jegliche Angaben außerhalb eines solchen Blocks werden ohne Warnung einfach ignoriert. Das trifft in deinem Beispiel oben z.B. auf das erste <div> zu. Also, überschreibe nur die Blöcke die du wirklich ändern willst, achte auf keinen Code außerhalb von Blöcken und pass bei verschachtelten Blöcken besonders auf - wenn Du den übergeordneten Block überschreibst, betrifft das auch alle eingebetteten Blöcke.

LG Phil