Diferença entre <remover nome = ”" /> e <método de ação = ”unsetChild”> no layout

21

Qual é a diferença entre <action method=”unsetChild”>e <remove name=""/>?

Ambas as funções são usadas para remover um bloco do layout.

Alguém poderia explicar com um exemplo?

MeenakshiSundaram R
fonte

Respostas:

21

<remove name="" />opera no escopo global de blocos de Mage_Core_Model_Layout. Eles são coletados Mage_Core_Model_Layout::generateXml()e usados ​​para impedir que o bloco com o nome especificado seja instanciado . Além disso, qualquer criança blocos declarados para um <remove />bloco ed irá também não pode ser instanciado .

<action method="" />aka Mage_Core_Block_Abstract::unsetChild()é um método em nível de bloco que deslista o bloco filho indicado (por alias , não por nome ) da instância do bloco pai na qual a ação está sendo chamada. Isso geralmente resulta no bloco "desaparecendo" da saída renderizada, mesmo que a instância do bloco ainda seja criada. Usado em combinação com os métodos ::append()ou ::insert(), é usado para executar um "movimento".

benmarks
fonte
Só para adicionar isso, se o bloco não tiver um alias, ele corresponderá ao nome.
Ben Crook
2
Correto, quando nenhum alias é fornecido, o aliaspara um filho é definido como name. Ben
benmarks
2

<remove name="" />, Quando terminar com todos os layouts, o Magento excluirá completamente o bloco com o nome indicado = "", independentemente de qual manipulador de layout foi adicionado. Usando esse método, é impossível remover um bloco de um local e adicioná-lo a outro

<action method="unsetChild">opera apenas no contexto em que está sendo usado. unsetChild é criado para mover blocos existentes de um lugar para outro. Você precisa usar esse método se desejar remover um bloco específico de uma alça de layout específica e, em seguida, insira-o em outra posição ou alça de layout.

Sohel Rana
fonte
Não é bem assim; veja minha resposta para correções.
benmarks 6/02/14