Переписать модель, чтобы предотвратить изменение способа доставки на этапе проверки заказа при оформлении заказа

magento.stackexchange https://magento.stackexchange.com/questions/104911

Вопрос

Я пытаюсь переопределить класс model, чтобы клиенты не меняли адрес и метод доставки на этапе проверки (окончательного) заказа при оформлении заказа, используя это предложение.Это момент, когда клиент был возвращен с 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_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();
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top