Обновить тип блока в макете XML-обновлений - PullRequest
10 голосов
/ 29 апреля 2011

Я пытаюсь обновить параметр «type» существующего блока в XML-формате макета моей темы.Например, я хотел бы использовать блок «catalog / rewrite_navigation» вместо «catalog / navigation» для ссылочного имени «catalog.topnav».

Я протестировал несколько способов, читая основные файлы PHPдля макета, блоков, обновлений и т. д., но не удалось.Я просто хотел бы избежать использования unsetChild, а затем воссоздать блок.

"Обычный" способ будет таким:

    <reference name="top.menu">
        <action method="unsetChild"><name>catalog.topnav</name></action>
        <block type="catalog/rewrite_navigation" name="catalog.topnav" template="catalog/navigation/top.phtml"/>
    </reference>

Но у вас, ребята, есть подсказка сделать что-то подобное:

    <reference name="catalog.topnav">
        <action method="setType"><name>catalog/rewrite_navigation</name></action>
    </reference>

При таком обновлении тип блока catalog.topnav будет изменен с "catalog / navigation" на "catalog / rewrite_navigation".

Большое спасибо за ваши идеи!

1 Ответ

7 голосов
/ 29 апреля 2011

Я никогда не видел подобного синтаксиса, и я знаю, что Magento создает объект перед выполнением над ним действий (потому что он должен иметь экземпляр, прежде чем он сможет выполнять методы на этом экземпляре). Это наводит меня на мысль, что нет способа сделать это с помощью действий.

Также остерегайтесь попыток сделать это, сняв блок и добавив его снова. Ко времени выполнения макета другие блоки, возможно, уже добавили дочерние элементы к этому блоку, и они просто исчезнут, когда вы удалите блок.

Канонический способ сделать это - просто переопределить действительный блок catalog/navigation, чтобы он возвращал класс, для которого вы намеревались. Если по какой-то причине это не работает для вас (например, кто-то другой уже переопределил блок), вам может потребоваться изменить файл XML, чтобы он отражал ваш новый дескриптор класса.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...