Riscrivi il modello per prevenire la modifica del metodo di spedizione in revisione Stadio dell'ordine del checkout
-
29-09-2020 - |
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:
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>
. 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();
}
}
.