Magento のすべてのブロックは、抽象から継承し、コードのフラグメント内にあります。
#File: app/code/core/Mage/Core/Block/Abstract.php
public function setLayout(Mage_Core_Model_Layout $layout)
{
$this->_layout = $layout;
Mage::dispatchEvent('core_block_abstract_prepare_layout_before', array('block' => $this));
$this->_prepareLayout();
Mage::dispatchEvent('core_block_abstract_prepare_layout_after', array('block' => $this));
return $this;
}
コア ブロックの準備レイアウトにフックする方法は 2 つあります。
- コア ブロックを独自のものに書き直し、その親を呼び出して _prepareLayout 関数を作成し、その後にコードを実行します。
- core_block_abstract_prepare_layout_after イベントを観察し、ブロックのインスタンスが目的のものであるかどうかを確認します
2 番目の利点は、イベント/オブザーバー パターンが、追加機能を実装するためのより優れた、より安定した選択肢であることです。ただし、欠点は、レイアウトが準備されているすべてのブロックに対してオブザーバーを実行する必要があることです。
ここでより良いプログラミング手法はどれですか?