Differenza tra <remove name = ”" /> e <action method = ”unsetChild”> nel layout


21

Qual è la differenza tra <action method=”unsetChild”>e <remove name=""/>?

Entrambe le funzioni vengono utilizzate per rimuovere un blocco dal layout.

Qualcuno potrebbe spiegare con un esempio?

Risposte:


21

<remove name="" />opera nell'ambito del blocco globale di Mage_Core_Model_Layout. Questi vengono raccolti Mage_Core_Model_Layout::generateXml()e utilizzati per impedire che il blocco con il nome specificato venga persino istanziato . Inoltre, eventuali blocchi bambino dichiarati per un <remove />blocco ed avranno , inoltre, non essere istanziati .

<action method="" />aka Mage_Core_Block_Abstract::unsetChild()è un metodo a livello di blocco che elimina il blocco figlio indicato (per alias , non per nome ) dall'istanza del blocco padre su cui viene chiamata l'azione. Ciò provoca spesso la scomparsa del blocco dall'output di rendering, anche se l'istanza del blocco è ancora creata. Utilizzato in combinazione con i metodi ::append()o ::insert(), viene utilizzato per eseguire una "mossa".


Solo per aggiungere a questo, se il blocco non ha un alias, corrisponderà al nome.
Ben Crook,

2
Corretto, quando non viene fornito alcun alias, aliasfor for child è impostato su its name. 👍
benmarks

2

<remove name="" />, Al termine di tutti i layout, Magento eliminerà completamente il blocco con il nome indicato = "", indipendentemente dal layout a cui è stato aggiunto. Utilizzando questo metodo è impossibile rimuovere un blocco da una posizione e quindi aggiungerlo a un'altra

<action method="unsetChild">opera solo nel contesto in cui viene utilizzato. unsetChild è creato per spostare blocchi esistenti da un posto all'altro. È necessario utilizzare questo metodo se si desidera rimuovere un blocco specifico da un handle di layout specifico e quindi inserirlo in un'altra posizione o handle di layout.


Non proprio; vedere la mia risposta per le correzioni.
benmarks
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.