3

我想自动填写运输方式,而不是在单页结账时显示。我可以通过在app/code/local/Mage/Checkout/controllers/OnepageController.php上更改它来隐藏 Onepagechekout 上的运输方式:

/**
 * save checkout billing address
 */
public function saveBillingAction()
{
    if ($this->_expireAjax()) {
        return;
    }
    if ($this->getRequest()->isPost()) {
//            $postData = $this->getRequest()->getPost('billing', array());
//            $data = $this->_filterPostData($postData);
        $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()
                );
            } elseif (isset($data['use_for_shipping']) && $data['use_for_shipping'] == 1) 
              {
                $result['goto_section'] = 'payment';
                $result['update_section'] = array(
                    'name' => 'payment-method',
                    'html' => $this->_getPaymentMethodsHtml()
                );

                $result['allow_sections'] = array('shipping');
                $result['duplicateBillingInfo'] = 'true';
            } else {
                $result['goto_section'] = 'shipping';
            }
        }
        $this->saveShippingMethodAction();
        $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
    }
}

如您所见,我更改了在计费操作后将下一步重定向到付款步骤的链接。

为了自动保存运输方式,我添加了

$this->saveShippingMethodAction();

在函数的末尾,这个方法如下所示:

    public function saveShippingMethodAction()
{
    $this->_expireAjax();
    if ($this->getRequest()->isPost()) {
        /* $this->savePaymentAction(); */
        $data = $this->getRequest()->getPost('shipping_method', 'flatrate_flatrate');
        $result = $this->getOnepage()->saveShippingMethod($data);
           $this->getResponse()->setBody(Zend_Json::encode($result));
    }

}

所以我所做的是尝试将自动flatrate_flatrate方法作为默认方法。

但是当我尝试完成销售时,它说我没有指定运输方式。知道为什么它不起作用吗?

4

1 回答 1

4

现在您需要在报价和会话中强制使用 shipping_method :

$forcedMethod = "your_method_code";

$this->getOnePage()->getQuote()
    ->getShippingAddress()
    ->setShippingMethod($forcedMethod)
    ->save();

Mage::getSingleton('checkout/session')->setShippingMethod($forcedMethod);

就在你打电话之前:

$this->saveShippingMethodAction(); 

添加一个:

$this->getRequest()->setPost('shipping_method', $forcedMethod);

它应该工作;)

于 2012-11-19T12:32:59.460 回答