什么是在Magento中准备布局后自定义核心块的更好方法?

时间:2013-02-11 13:33:15

标签: magento

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;
}

有两种方法可以挂钩核心块的准备布局:

  1. 将核心块重写为您自己的并创建_prepareLayout函数,调用它的父级,然后在
  2. 之后执行代码
  3. 观察core_block_abstract_prepare_layout_after事件并检查该块的实例是否是您感兴趣的实例
  4. 第二个优点是事件/观察者模式是实现其他功能的更好,更稳定的选择。 但是,缺点是观察者必须为准备布局的每个块运行。

    这里有哪种更好的编程技术?

1 个答案:

答案 0 :(得分:2)

如果重写Abstract类,大多数块仍将使用核心中的块,因为它们直接从它扩展而不使用Magento重写规则。 所以我会用你的第二个解决方案。即使在每个块上都有观察者,性能问题也不应该那么大,因为在大多数情况下,你只需用instanceof执行一个简单的条件,这非常快。