重写模型以防止在结帐的审核订单阶段更改运输方式
-
29-09-2020 - |
题
我试图重写模型类,以防止客户在结帐的(最终)订单审核阶段更改送货地址和方法,使用 这个建议. 。此时,客户已从 PayPal 返回,以便在最终单击“下订单”按钮之前检查订单。我们通过报价与客户预先商定运输费用,因此让他们选择更改运输方式没有任何意义。
这是我第一次尝试在 Magento 中这样做。感觉就像我 几乎 在那里,但它不起作用:
如果任何有在 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();
}
}