Magento Core: идентичное название блока в одной ручке
Вопрос
Я хочу изменить шаблон с помощью имени блока «repistent.remempect.me», но есть два блока с одним и тем же именем под одной и той же ручкой:
app/design/frontend/base/default/layout/repistent.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>
Я создал local.xml со следующим содержанием:
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>
И все работает нормально; Только шаблон последней ссылки ("Checkout.onepage.billing") обновляется, что именно я хочу, но я не уверен, почему это делает это. У меня было впечатление, что имена блоков всегда должны быть уникальными. Это ошибка в Magento? Что может случиться с этим кодом, если я обновлю Magento?
Решение
Эрфан прав, что HTML выводится дважды, один раз в качестве ребенка «Checkout.onepage.login» и один раз в качестве ребенка «Checkout.onepage.billing '
Таким образом, есть два дочерних блока с тем же именем. Каждый может иметь свой шаблон, и каждый из них воспринимается как ребенок родителя.
Чтобы изменить постоянный блок в любом из родительских блоков, вам необходимо нацелить родительский блок непосредственно, например:
<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>
Вышеуказанное изменит только шаблон в блоке входа в систему.
Если вы нацелитесь только на детского блока «Persistent.Remember.me», то Magento, похоже, только изменяет возникновение первого найденного блока. Начало спекуляции: Это, скорее всего, в порядке или возникновении альфа, с «Checkout.Onpage.Billing», появляющимся в алфавитном порядке до «Checkout.onepage.login», в любом массиве, используемом для хранения блока внутри внутреннего. Тот факт, что. Забивание производится после .login, просто выглядит так, как будто он меняет только второе событие. :) Конечные спекуляции
Другие советы
Нет, это не ошибка. Бьюсь об заклад, на сайте есть только один блок из "Checkout.onepage.billing" и "Checkout.onepage.login".
Таким образом, есть только один блок "Persistent.Remember.me".