Magento Core: identischer Blockname in einem Handle

7

Ich möchte die Vorlage mit dem Blocknamen "persistent.remember.me" ändern, aber es gibt zwei Blöcke mit demselben Namen unter demselben Handle:

app / design / frontend / base / default / layout / persistent.xml

<checkout_onepage_index>
    <reference name="checkout.onepage.login">
        <action method="setTemplate"><template>persistent/checkout/onepage/login.phtml</template></action>
        <block type="persistent/form_remember" name="persistent.remember.me" template="persistent/remember_me.phtml" />
    </reference>
    <reference name="checkout.onepage.billing">
        <action method="setTemplate"><template>persistent/checkout/onepage/billing.phtml</template></action>
        <block type="persistent/form_remember" name="persistent.remember.me" template="persistent/remember_me.phtml" />
        <block type="core/template" name="persistent.remember.me.tooltip" template="persistent/remember_me_tooltip.phtml" />
    </reference>
</checkout_onepage_index>

Ich habe eine local.xml mit folgendem Inhalt erstellt:

app / design / frontend / mytheme / default / layout / local.xml

<checkout_onepage_index>
    <reference name="persistent.remember.me">
        <action method="setTemplate"><template>mytheme/persistent/remember_me.phtml</template></action>
    </reference>
</checkout_onepage_index>

Und alles funktioniert gut; Nur die Vorlage der letzten Referenz ("checkout.onepage.billing") wird aktualisiert. Genau das möchte ich, aber ich bin mir nicht sicher, warum dies so ist. Ich hatte den Eindruck, dass Blocknamen immer eindeutig sein sollten. Ist das ein Fehler in Magento? Was kann mit diesem Code passieren, wenn ich Magento aktualisiere?

Erfan
quelle

Antworten:

5

Erfan hat Recht, dass der HTML-Code zweimal ausgegeben wird, einmal als untergeordnetes Element von 'checkout.onepage.login' und einmal als untergeordnetes Element von 'checkout.onepage.billing'.

Somit gibt es zwei untergeordnete Blöcke mit demselben Namen. Jeder kann eine andere Vorlage haben und jeder wird als untergeordnetes Element des Elternteils gerendert.

Um den persistenten Block in einem der übergeordneten Blöcke zu ändern, müssen Sie direkt auf den übergeordneten Block abzielen, z.

<checkout_onepage_index>
    <reference name="checkout.onepage.login">
            <block type="persistent/form_remember" name="persistent.remember.me" template="my/custom/template.phtml" />
        </reference>
</checkout_onepage_index>

Das Obige ändert nur die Vorlage im Anmeldeblock.

Wenn Sie nur auf den untergeordneten Block 'persistent.remember.me' abzielen, scheint Magento nur das Auftreten des ersten gefundenen Blocks zu ändern. Spekulation starten: Dies ist höchstwahrscheinlich in der Reihenfolge oder im Alpha-Vorkommen der Fall, wobei 'checkout.onepage.billing' alphabetisch vor 'checkout.onepage.login' in dem Array angezeigt wird, in dem der Block intern gespeichert wird. Die Tatsache, dass .billing nach .login gerendert wird, lässt es nur so aussehen, als würde es nur das zweite Vorkommen ändern. :) Spekulation beenden

ProxiBlue
quelle
4

Nein, das ist kein Fehler. Ich wette, es gibt nur einen Block auf der Website von "checkout.onepage.billing" und "checkout.onepage.login".

Es gibt also nur einen Block "persistent.remember.me".

Fabian Blechschmidt
quelle
Aber der HTML wird zweimal ausgegeben? Auch wenn ich etwas in App / Design / Frontend / Mythos / Standard / Mythos / Persistent / Remember_me.phtml ändere, ändert sich nur der letzte? Wenn ich App / Design / Frontend / Base / Standard / Persistent / Remember_me.phtml ändere, ändert sich nur die erste ...
Erfan
Ein weiteres Beispiel, bei dem zwei gleichnamige Blöcke auf derselben Seite ausgegeben werden, befindet sich im Warenkorb im Handle checkout_cart_index. Sowohl checkout.cart.top_methods als auch checkout.cart.methods haben einen Block mit dem Namen checkout.cart.methods.onepage.
Pcronin