2013-07-23 75 views
0

我在magento的結帳過程中有一個鉤子,在觀察者處:checkout_controller_onepage_save_shipping_method。這個觀察者行爲發生在用戶在Magento中選擇一種送貨方式後,點擊「下一步」按鈕來保存送貨方式,並繼續完成結賬流程。magento onepage結帳,創建錯誤消息並重定向

我寫過的代碼有時可能會告訴用戶(取決於各種因素,例如購物車項目以及他們正在運送的狀態)他可能不會繼續結帳過程,而必須調用商店來代替特殊運輸說明。

,因爲它被包裝在一個AJAX腳本定期重定向功能不onepage結賬裏面工作,我曾嘗試以下:

Mage::getSingleton('core/session')->addError('The shipping required for one of the products you are attempting to order..'); 

$response1 = $observer->getResponse(); 

$url = Mage::getUrl('checkout/cart'); 

$response1->setRedirect($url); 

Mage::throwException($this->__('The shipping required for one of the products you are attempting to order requires special instructions, please call us.')); 

$observer->getRequest()->setParam('return_url','http://www.google.com/'); 
      exit; 

Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('checkout/cart')); 
Mage::app()->getResponse()->sendResponse(); 
exit; 

但這些都沒有工作。我相信我必須重寫OnePageController.php中的一些函數,但我不知道需要更新哪些內容。任何幫助將不勝感激。謝謝!

回答

0

您正在設置重定向並將錯誤附加到AJAX請求。由於該步驟是由JavaScript控制,你有兩個選擇:

  • 顯示錯誤並重定向到購物車當客戶提交他或她的訂單,而不是出貨步驟之後。在JavaScript
  • 重定向,或者通過重新定義window.location或提交一個隱藏的表單

第一個會更容易,但第二個將提供更好的用戶體驗。您需要重定向到自定義控制器才能添加錯誤消息並將用戶發送回購物車頁面。

+0

我會在哪裏重新定義了window.location - 這是我唯一的選擇,因爲我不能讓他們甚至提出在他們的車與某些產品的訂單(如果產品被運到某些州) – vaskaloidis

+0

'window.location ='checkout/cart''是你如何在javascript中啓動重定向。您需要在onepage結帳時掛入的javascript事件是'shipping/in/template/checkout/onepage/shipping.phtml'中的shipping.save()。確保您重定向到自定義控制器,該控制器看起來像您的第一個代碼示例,以便您可以添加消息並將用戶發送到產品頁面。 – giaour

1

最近我有同樣的問題,當我試圖創建onepage結賬過程中的錯誤信息和多次嘗試後,我可以取消該進程,同時警示,並顯示錯誤消息的用戶(我的目標是做到這一點的觀察者功能)。

我的代碼:

$result['success'] = false; 
$result['error'] = true; 
$result['error_messages'] = implode(', ', $errors); 
$response = Mage::app()->getResponse(); 
$response->setBody(Mage::helper('core')->jsonEncode($result)); 
$response->sendResponse(); 
exit;