Разница между <remove name = ”" /> и <action method = ”unsetChild”> в макете


21

В чем разница между <action method=”unsetChild”>и <remove name=""/>?

Обе функции используются для удаления блока из макета.

Может ли кто-нибудь объяснить на примере?

Ответы:


21

<remove name="" />работает в области глобального блока Mage_Core_Model_Layout. Они собираются Mage_Core_Model_Layout::generateXml()и используются для предотвращения создания экземпляров блока с указанным именем . Кроме того, любые дочерние блоки, объявленные для <remove />блока ed , также не будут созданы .

<action method="" />aka Mage_Core_Block_Abstract::unsetChild()- это метод уровня блока, который удаляет указанный дочерний блок (по псевдониму , а не по имени ) из экземпляра родительского блока, для которого вызывается действие. Это чаще всего приводит к тому, что блок «исчезает» из визуализированного вывода, даже если экземпляр блока все еще создается. Используется в сочетании с методами ::append()или ::insert(), он используется для выполнения «перемещения».


Просто добавьте к этому, если блок не имеет псевдонима, он будет соответствовать имени.
Бен Крук

2
Правильно, когда псевдоним не предоставлен, aliasдля дочернего элемента устанавливается его name. 👍
отметки

2

<remove name="" />, После завершения всех макетов, Magento полностью удалит блок с указанным именем = "", независимо от того, к какому дескриптору макета он был добавлен. Используя этот метод, невозможно удалить блок из одного местоположения, а затем добавить его в другое

<action method="unsetChild">работает только в контексте, где он используется. unsetChild создан для перемещения существующих блоков из одного места в другое. Этот метод необходимо использовать, если вы хотите удалить определенный блок из определенного дескриптора макета, а затем вставить его в другое положение или дескриптор макета.


Не совсем; см. мой ответ для исправлений.
отметки
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.