Magento:停止在pre_dispatch观察者中调度

时间:2012-10-29 22:04:15

标签: php magento observer-pattern dispatch

我想影响产品呈现(将$params传递给Mage_Catalog_Helper_Product_View::prepareAndRender())并在controller_action_predispatch_catalog_product_view事件中注册观察者。

渲染工作正常,但原始的catalog/product/view操作仍然执行,因此会显示两个产品。

如何在预派遣观察员期间停止调度?

1 个答案:

答案 0 :(得分:7)

  1. 请求的dispatched字段必须为true
  2. 前方操作的FLAG_NO_DISPATCH标志必须设置为true
  3. 在代码中(内部观察者):

    // @see Mage_Core_Controller_Varien_Action::dispatch()
    $controller = $observer->getControllerAction();
    $controller->getRequest()->setDispatched(true);
    $controller->setFlag(
        '', 
        Mage_Core_Controller_Front_Action::FLAG_NO_DISPATCH, 
        true
    );