Magento Core: идентичное название блока в одной ручке

magento.stackexchange https://magento.stackexchange.com/questions/1020

  •  16-10-2019
  •  | 
  •  

Вопрос

Я хочу изменить шаблон с помощью имени блока «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".

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top