Riscrivi il modello per prevenire la modifica del metodo di spedizione in revisione Stadio dell'ordine del checkout

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

Domanda

Sto cercando di sovrascrivere una classe del modello per impedire ai clienti la modifica dell'indirizzo di spedizione e il metodo alla fase di revisione dell'ordine (finale), utilizzando Questo suggerimento . Questo è il punto in cui il cliente è stato restituito da PayPal per verificare l'ordine prima di fare finalmente facendo clic sul pulsante "Place Order". Facciamo pre-concordare i costi di spedizione con i nostri clienti tramite una quotazione, quindi dando loro la possibilità di cambiare il metodo di spedizione non ha senso.

Questo è il mio primo tentativo di farlo in Magento. Sembra che io sia quasi lì ma non funziona:

 Il metodo di spedizione dell'ordine è ancora modificabile

Se qualcuno con esperienza di lezioni del modello promemoria in Magento potrebbe dirmi dove sto andando male, sarebbe fantastico.

(1)
(a) Crea / app / code / local / lms / paypal / modello / express e copia in /app/code/core/mage/paypal/model/express/checkout.php

(b) Rinomina Classe In Checkout.php da: Mage_PayPal_Model_Express_Checkout a: lms_paypal_model_express_checkout estende mage_paypal_model_express_checkout

(c) Cancellare il corpo della classe e sostituire con questa funzione:

/**
 * 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) Ora crea dir / app / codice / locale / lms / paypal / etc /
(b) creare file config.xml in quella dir e inserire questo codice lì:

<?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) Ora andare / app / etc / modules /
(b) Crea lms_paypal.xml in quella dir e inserire questo codice in lms_paypal.xml:

<?xml version="1.0"?>  
<config>  
    <modules>  
        <Lms_Paypal>  
            <active>true</active>  
            <codePool>local</codePool>  
        </Lms_Paypal>  
    </modules>  
</config> 
.

È stato utile?

Soluzione

Il tuo modo sbagliato in /app/code/local/Lms/Paypal/etc/config.xml e file modello

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

Sostituisci il codice file config.xml da

<?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>
.

a

<?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>
.

Sostituisci anche il codice in file app/code/local/Lms/Paypal/Model/Express/Checkout.php da

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

a

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();
    }
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top