2013-02-01 56 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

您可以更換購物車,因此符合條件。但是,如果您不想更換購物車,那麼您應該參加派送活動 –