Подтвердить что ты не робот

В чем разница между методами remove и unsetChild в макете?

В чем разница между методами удалить и unsetChild в макете?

Например (в файле макета poll.xml):

<customer_account_index>
    <reference name="right">
        <action method="unsetChild"><name>catalog_compare_sidebar</name></action>
    </reference>
</customer_account_index>

Почему unsetChild, а не только удалить?

4b9b3361

Ответ 1

Удалить узлы будут обработаны после того, как все макеты будут объединены, и это хороший способ удалить блок, независимо от того, какой дескриптор макета загрузил блок; вы просто хотите полностью избавиться от него для некоторых ручек! Он также удаляет рекурсивно, поэтому все, что вам нужно указать, - это дескриптор макета.

С другой стороны, вы можете только удалить блок из ссылки в определенном макете дескриптора, и в этом случае вы должны использовать unsetChild. Он часто используется для удаления блока из ссылки, но затем снова вставляет тот же блок с другой позицией. Это было бы невозможно с удалением.

В вашем конкретном примере разработчики magento использовали его, чтобы придать magento некоторую гибкость. Скажем, я добавил подстраницу для страницы индекса учетной записи, и были загружены следующие макеты:

  • По умолчанию
  • ...
  • customer_account_index
  • customer_account_index_subpage

И теперь предположим, что на этой подстранице мне действительно нужен блок catalog_compare_sidebar. Если бы они использовали "remove", я бы не смог добавить этот блок (с этим конкретным именем), потому что "remove" будет обработан - после этого я сам добавил блок.

Это позволяет легко вносить изменения из одного файла; local.xml.

Ответ 2

Взяв ваш код в качестве примера, если вы используете unsetchild, сравните блок боковой панели, удаленный из правого столбца, но вы можете использовать его в любом месте, как левый столбец, нижний колонтитул и т.д., remove полностью удаляется из шаблона и нигде нельзя использовать.

Удалите боковую панель сравнения с помощью remove, и если вы вызовете ее где-нибудь еще, будет сброшена ошибка.