Pregunta

Quiero cambiar la plantilla con el nombre del bloque "persistent.remember.me", pero hay dos bloques con el mismo nombre bajo el mismo mango:

app / design / frontend / base / default / diseño / 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>

He creado una local.xml con el siguiente contenido:

app / design / frontend / mytheme / default / diseño / 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>

Y todo funciona bien; Sólo la plantilla de la última referencia ( "checkout.onepage.billing") se actualiza, que es exactamente lo que quiero, pero no estoy seguro de por qué lo hace. Yo tenía la impresión de que nombres de los bloques siempre deben ser únicos. Es esto un error en Magento? Lo que podría suceder a este código si actualizo Magento?

¿Fue útil?

Solución

Erfan es correcto que la html se emite dos veces, una como un hijo de 'checkout.onepage.login' y una vez como un hijo de 'checkout.onepage.billing'

Por lo tanto hay dos bloques del niño con el mismo nombre. Cada uno puede tener una plantilla diferente, y cada uno obtiene representa como un niño de los padres.

Para cambiar el bloque persistente en cualquiera de los bloques de los padres, es necesario apuntar directamente al bloque padre como por ejemplo:

<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>

Lo anterior será solamente cambiar la plantilla en el bloque de inicio de sesión.

Si sólo se dirigen a los 'persistent.remember.me' bloque de niño entonces parece Magento sólo para cambiar la aparición del primer bloque se encuentran. La especulación de inicio: Esto es más probable con el fin ocurrencia o alfa, con 'checkout.onepage.billing' que aparece alfabéticamente antes 'checkout.onepage.login', en cualquier matriz se utiliza para almacenar el bloque internamente. El hecho de que .billing se hace después de .login sólo hace que parezca que sólo se está cambiando la segunda aparición. :) Fin especulación

Otros consejos

No, esto es sin error. Apuesto a que sólo hay un bloque en el sitio de "checkout.onepage.billing" y "checkout.onepage.login".

Así que sólo hay un bloque "persistent.remember.me".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top