【问题标题】:Observer for Checkout Start结帐开始观察员
【发布时间】:2013-01-17 03:09:03
【问题描述】:

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

【问题讨论】:

标签: magento observers


【解决方案1】:

看看@controller_action_predispatch_checkout_onepage_index事件

'Proceed to Checkout' Event for Magento?

【讨论】:

    【解决方案2】:

    你为什么要这么晚?根据您检查的内容,您可能会在将它们添加到购物车后执行它? checkout_cart_save_before

    【讨论】:

    • 他们可以添加到购物车,查看错误消息,但仍然检查。如果不满足条件,我需要完全阻止结帐,最好是在开始时。
    • 可以更换购物车,满足条件。但是是的,如果您不想更改购物车,则应该继续调度事件
    【解决方案3】:

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

    在标准单页结帐的情况下,完整的操作名称为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() 的事件可能很有用。您需要测试“客户已登录”和“客户已注销”场景。虽然预调度事件对于涉及重定向的逻辑是首选,但您需要平衡您的需求与重复购物车/报价 + 客户会话逻辑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多