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;
}
有两种方法可以连接到核心块的准备布局:
- 将核心块重写为您自己的并创建 _prepareLayout 函数调用它的父级,然后在之后执行您的代码
- 观察 core_block_abstract_prepare_layout_after 事件并检查块的实例是否是您感兴趣的实例
第二种的优点是事件/观察者模式是实现附加功能的更好、更稳定的选择。然而,缺点是观察者必须为每个准备好布局的块运行。
这里哪种编程技术更好?