Переписать модель, чтобы предотвратить изменение способа доставки на этапе проверки заказа при оформлении заказа
-
29-09-2020 - |
Вопрос
Я пытаюсь переопределить класс model, чтобы клиенты не меняли адрес и метод доставки на этапе проверки (окончательного) заказа при оформлении заказа, используя это предложение.Это момент, когда клиент был возвращен с 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_Express_Checkout для: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();
}
}