Unterschied zwischen <remove name = ”" /> und <action method = ”unsetChild”> im Layout

21

Was ist der Unterschied zwischen <action method=”unsetChild”>und <remove name=""/>?

Mit beiden Funktionen wird ein Block aus dem Layout entfernt.

Könnte jemand mit einem Beispiel erklären?

MeenakshiSundaram R
quelle

Antworten:

21

<remove name="" />arbeitet im globalen Blockumfang von Mage_Core_Model_Layout. Diese werden in gesammelt Mage_Core_Model_Layout::generateXml()und verwendet, um zu verhindern, dass der Block mit dem angegebenen Namen auch nur instanziiert wird . Untergeordnete Blöcke, die für einen <remove />ed-Block deklariert wurden , werden ebenfalls nicht instanziiert .

<action method="" />aka Mage_Core_Block_Abstract::unsetChild()ist eine Methode auf Blockebene, bei der der angegebene untergeordnete Block (nach Alias , nicht nach Name ) aus der übergeordneten Blockinstanz entfernt wird, für die die Aktion aufgerufen wird. Dies führt häufig dazu, dass der Block aus der gerenderten Ausgabe "verschwindet", obwohl die Blockinstanz noch erstellt wird. Wird in Kombination mit den Methoden ::append()oder ::insert()verwendet, um einen "Zug" auszuführen.

benmarks
quelle
Wenn der Block keinen Alias ​​hat, stimmt er mit dem Namen überein.
Ben Crook
2
Richtig, wenn kein Alias ​​angegeben ist, wird das aliasfür ein Kind auf sein gesetzt name. 👍
benmarks
2

<remove name="" />, Wenn alle Layouts fertig sind, löscht Magento den Block mit dem angegebenen Namen = "" vollständig, unabhängig davon, zu welchem ​​Layout-Handle er hinzugefügt wurde. Mit dieser Methode ist es nicht möglich, einen Block von einer Position zu entfernen und dann zu einer anderen hinzuzufügen

<action method="unsetChild">funktioniert nur in dem Kontext, in dem es verwendet wird. unsetChild wird erstellt, um vorhandene Blöcke von einem Ort an einen anderen zu verschieben. Sie müssen diese Methode verwenden, wenn Sie einen bestimmten Block aus einem bestimmten Layout-Handle entfernen und ihn dann an einer anderen Position oder in einem anderen Layout-Handle einfügen möchten.

Sohel Rana
quelle
Nicht ganz; Siehe meine Antwort für Korrekturen.
benmarks