2013-01-06 77 views
0

我正在爲客戶寫一個新的發貨方式;我已經有了很好的運費計算,並且它們出現在'送貨方式'步驟中 - 但是,我希望:Magento單頁結帳mod

a)強制'Shipping Information'選項卡在用戶點擊billing.save後打開()由第一個(帳單)選項卡中的繼續按鈕觸發,即使他們選擇發送到帳單地址;和

b)在運輸信息選項卡中添加'收貨','運輸保證'和'卡車尾貨取件'的選項 - 重新計算運輸報價時將考慮到這些選項。

在b)中,我假定我在/ layout中使用xml配置文件覆蓋shipping.phtml模板,然後在collectRates()方法中查找那些添加的post字段。

在此先感謝!

回答

2

至於部分a),您將需要覆蓋控制器Mage_Checkout_OnepageController。爲此創建自己的模塊(我假設你知道如何做到這一點),並在應用程序/代碼/本地/ YourModule的/ etc/config.xml中你應該有這樣的一部分:

<config> 
... 
    <frontend> 
     <routers> 
      <checkout> 
       <args> 
        <modules> 
         <YourModule_Checkout before="Mage_Checkout">YourModule_Checkout</YourModule_Checkout> 
        </modules> 
       </args> 
      </checkout> 
     </routers> 
    </frontend> 
</config> 

然後在app /代碼/本地/ YourModule/controllers/OnepageController.php你想覆蓋的行爲,所以當你點擊保存帳單按鈕,你將永遠降落在發貨頁面。

include_once("Mage/Checkout/controllers/OnepageController.php"); 

class YourModule_Checkout_OnepageController extends Mage_Checkout_OnepageController 
{ 
    public function saveBillingAction() 
    { 
    if ($this->_expireAjax()) { 
     return; 
    } 
    if ($this->getRequest()->isPost()) { 
     $data = $this->getRequest()->getPost('billing', array()); 
     $customerAddressId = $this->getRequest()->getPost('billing_address_id', false); 

     if (isset($data['email'])) { 
      $data['email'] = trim($data['email']); 
     } 
     $result = $this->getOnepage()->saveBilling($data, $customerAddressId); 

     if (!isset($result['error'])) { 
      /* check quote for virtual */ 
      if ($this->getOnepage()->getQuote()->isVirtual()) { 
       $result['goto_section'] = 'payment'; 
       $result['update_section'] = array(
        'name' => 'payment-method', 
        'html' => $this->_getPaymentMethodsHtml() 
       ); 
      } else { // Removed elseif block here which usually skips over shipping if you selected to use the same address as in billing 
       $result['goto_section'] = 'shipping'; 
      } 
     } 

     $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); 
    } 
    } 
} 

然後對於b)部分,你有兩個選擇。不管是你指出你使用XML佈局系統設置不同的模板爲shipping.phtml:

<checkout_onepage_index> 
    <reference name="checkout.onepage.shipping"> 
     <action method="setTemplate"> 
     <new>my_shipping.phtml</new> 
     </action> 
    </reference> 
</checkout_onepage_index> 

或更容易,你overwritte使用自定義的設計文件夾中的shipping.phtml模板。 若要評估您的自定義數據,模型Mage_Checkout_Model_Type_Onepage處理saveShipping()方法中的數據,所以我想這是尋找實現您的自定義邏輯的好點。