レイアウトの<remove name =” "/>と<action method =” unsetChild”>の違い


21

違いは何である<action method=”unsetChild”>とは<remove name=""/>

両方の関数は、レイアウトからブロックを削除するために使用されます。

誰かが例を説明できますか?

回答:


21

<remove name="" />のグローバルブロックスコープで動作しMage_Core_Model_Layoutます。これらは、指定された名前のブロックがインスタンス化されないように収集されMage_Core_Model_Layout::generateXml()使用されます。また、子ブロックはに対して宣言<remove />編ブロックされますまた、インスタンス化できません

<action method="" />aka Mage_Core_Block_Abstract::unsetChild()は、ブロックレベルのメソッドであり、アクションが呼び出されている親ブロックインスタンスから、指定された子ブロックを(nameではなくaliasによって)リストから削除します。ほとんどの場合、ブロックインスタンスはまだ作成されていますが、レンダリングされた出力からブロックが「消失」します。またはメソッドと組み合わせて使用され、「移動」を実行するために使用されます。::append()::insert()


これに追加するために、ブロックにエイリアスがない場合、名前と一致します。
ベン・クルック

2
エイリアスが提供されていない場合alias、子のforはそのに設定されますname。👍
benmarks

2

<remove name="" />すべてのレイアウトが終了すると、Magentoは、追加されたレイアウトハンドルに関係なく、指定されたname = ""のブロックを完全に削除します。この方法を使用すると、ある場所からブロックを削除してから別の場所に追加することはできません

<action method="unsetChild">使用されているコンテキストでのみ動作します。unsetChildは、既存のブロックをある場所から別の場所に移動するために作成されます。特定のレイアウトハンドルから特定のブロックを削除してから、別の位置またはレイアウトハンドルに挿入する場合は、このメソッドを使用する必要があります。


そうではありません。修正については私の答えをご覧ください。
ベンマーク14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.