我试图重写模型类,以防止客户在结帐的(最终)订单审核阶段更改送货地址和方法,使用 这个建议. 。此时,客户已从 PayPal 返回,以便在最终单击“下订单”按钮之前检查订单。我们通过报价与客户预先商定运输费用,因此让他们选择更改运输方式没有任何意义。

这是我第一次尝试在 Magento 中这样做。感觉就像我 几乎 在那里,但它不起作用:

Review Order Shipping Method is still editable

如果任何有在 Magento 中重写模型类的经验的人都可以告诉我哪里出错了,那就太棒了。

(1)
(a) 创建 /app/code/local/Lms/Paypal/Model/Express 并复制到 /app/code/core/Mage/Paypal/Model/Express/Checkout.php

(b) 将 Checkout.php 中的类重命名为:mage_paypal_model_model_express_checkout to:Lms_Paypal_Model_Express_Checkout 扩展 Mage_Paypal_Model_Express_Checkout

(c) 清除类主体并仅用此函数替换:

/**
 * Check whether order review has enough data to initialize
 *
 * @param $token
 * @throws Mage_Core_Exception
 */
public function prepareOrderReview($token = null)
{
    parent::prepareOrderReview($token);
    $this->_quote->setMayEditShippingAddress(false);
    $this->_quote->setMayEditShippingMethod(false);
    $this->_ignoreAddressValidation();
    $this->_quote->collectTotals()->save();
}

(2)
(a) 现在创建目录 /app/code/local/Lms/Paypal/etc/
(b) 在该目录中创建 Config.xml 文件并将以下代码放在那里:

<?xml version="1.0"?>
<config>
    <modules>
        <lms_paypal>
            <version>0.1</version>
        </lms_paypal>
    </modules>
    <global>
       <models>
          <paypal>
              <rewrite>
                  <express>Lms_Paypal_Model_Express</express>
              </rewrite>
          </paypal>
       </models>
    </global>
</config>

(3)
(a) 现在转到 /app/etc/modules/
(b) 在该目录中创建 Lms_Paypal.xml 并将以下代码放入 Lms_Paypal.xml 中:

<?xml version="1.0"?>  
<config>  
    <modules>  
        <Lms_Paypal>  
            <active>true</active>  
            <codePool>local</codePool>  
        </Lms_Paypal>  
    </modules>  
</config> 
有帮助吗?

解决方案

你走错路了 /app/code/local/Lms/Paypal/etc/config.xml 和模型文件

/app/code/local/Lms/Paypal/Model/Express/Checkout.php

代替 config.xml 文件代码来自

<?xml version="1.0"?>
<config>
    <modules>
        <lms_paypal>
            <version>0.1</version>
        </lms_paypal>
    </modules>
    <global>
       <models>
          <paypal>
              <rewrite>
                  <express>Lms_Paypal_Model_Express</express>
              </rewrite>
          </paypal>
       </models>
    </global>
</config>

<?xml version="1.0"?>
<config>
    <modules>
        <Lms_Paypal>
            <version>0.1</version>
        </Lms_Paypal>
    </modules>
    <global>
       <models>
          <paypal>
              <rewrite>
                  <express_checkout>Lms_Paypal_Model_Express_Checkout</express_checkout>
              </rewrite>
          </paypal>
       </models>
    </global>
</config>

还要替换文件中的代码 app/code/local/Lms/Paypal/Model/Express/Checkout.php

public function prepareOrderReview($token = null)
{
    parent::prepareOrderReview($token);
    $this->_quote->setMayEditShippingAddress(false);
    $this->_quote->setMayEditShippingMethod(false);
    $this->_ignoreAddressValidation();
    $this->_quote->collectTotals()->save();
}

class Lms_Paypal_Model_Express_Checkout extends Mage_Paypal_Model_Express_Checkout
{

    public function prepareOrderReview($token = null)
    {
        $payment = $this->_quote->getPayment();
        if (!$payment || !$payment->getAdditionalInformation(self::PAYMENT_INFO_TRANSPORT_PAYER_ID)) {
            Mage::throwException(Mage::helper('paypal')->__('Payer is not identified.'));
        }
        $this->_quote->setMayEditShippingAddress(false);
        $this->_quote->setMayEditShippingMethod(false);
        $this->_ignoreAddressValidation();
        $this->_quote->collectTotals()->save();
    }
}
许可以下: CC-BY-SA归因
scroll top