2013-02-01 55 views
3

Magento中是否有观察者检测结帐过程的开始?这将包括点击页面checkout/onepage/checkout/onestepcheckout/。如果可能的话,我想避免重写控制器。观察员结帐开始

+0

你想建立一个客户数量还是什么? –

+0

我想先对购物车中的物品进行验证,如果验证失败,请将其重定向到购物车页面。 –

+0

你将不得不这样做与PHP见http://www.magentocommerce.com/boards/viewthread/294962/ –

回答

8

每个控制器操作都会导致多个目标事件,这些事件会在所有操作控制器的超类Mage_Core_Controller_Varien_Action (link)中触发。这些事件不同地涉及从模块路由器配置+控制器路径+操作派生的“完整操作名称”,以及正在请求的路由名称。

在标准onepage结帐的情况下,完整操作名称为checkout_onepage_index,路由名称为checkout_onepage

renderLayout():

controller_action_layout_render_before_'.$this->getFullActionName()

preDispatch()方法:

controller_action_predispatch_' . $this->getRequest()->getRouteName() controller_action_predispatch_' . $this->getFullActionName()

postDispatch()方法:

controller_action_postdispatch_' . $this->getRequest()->getRouteName() controller_action_postdispatch_' . $this->getFullActionName()

你观察将取决于OneStepCheckout模块如何捕捉路线事件。如果您需要区分路线和模块,基于getRouteName()的事件可能会很有用。您需要测试“客户已登录”和“客户已注销”的情况。虽然predispatch事件对于涉及重定向的逻辑是首选,但您需要在重复购物车/报价+客户会话逻辑之间平衡您的需求。

1

为什么你想这样做,那么晚?根据你正在检查的内容,你可能会在将它们添加到购物车后执行此操作? checkout_cart_save_before

+0

他们可以添加到购物车,查看错误消息,但仍然检查出来。如果条件不满足,我需要完全阻止结帐,优先选择正确的开始。 –

+0

您可以更换购物车,因此符合条件。但是,如果您不想更换购物车,那么您应该参加派送活动 –