Schreiben Sie das Modell neu, um zu verhindern, dass sich die Versandart in der Bestellprüfungsphase des Bezahlvorgangs ändert
-
29-09-2020 - |
Frage
Ich versuche, eine Modellklasse zu überschreiben, um zu verhindern, dass Kunden die Versandadresse und -methode in der (abschließenden) Bestellüberprüfungsphase des Bezahlvorgangs ändern dieser Vorschlag.Dies ist der Punkt, an dem der Kunde von PayPal zurückgekehrt ist, um die Bestellung zu überprüfen, bevor er schließlich auf die Schaltfläche „Bestellung aufgeben“ klickt.Wir vereinbaren die Versandkosten mit unseren Kunden im Voraus über ein Angebot, daher macht es keinen Sinn, ihnen die Möglichkeit zu geben, die Versandart zu ändern.
Dies ist mein erster Versuch, dies in Magento zu tun.Es fühlt sich an, als wäre ich es fast dort, aber es funktioniert nicht:
Wenn mir jemand mit Erfahrung im Überschreiben von Modellklassen in Magento sagen könnte, wo ich falsch liege, wäre das fantastisch.
(1)
(a) Erstellen Sie /app/code/local/Lms/Paypal/Model/Express und kopieren Sie es in /app/code/core/Mage/Paypal/Model/Express/Checkout.php
(b) Benennen Sie die Klasse in Checkout.php um von:Mage_paypal_model_express_checkout an:Lms_Paypal_Model_Express_Checkout erweitert Mage_Paypal_Model_Express_Checkout
(c) Löschen Sie den Klassenkörper und ersetzen Sie ihn durch diese Funktion:
/**
* 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) Erstellen Sie nun das Verzeichnis /app/code/local/Lms/Paypal/etc/
(b) Erstellen Sie die Datei Config.xml in diesem Verzeichnis und fügen Sie diesen Code dort ein:
<?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) Gehen Sie nun zu /app/etc/modules/
(b) Erstellen Sie Lms_Paypal.xml in diesem Verzeichnis und fügen Sie diesen Code in Lms_Paypal.xml ein:
<?xml version="1.0"?>
<config>
<modules>
<Lms_Paypal>
<active>true</active>
<codePool>local</codePool>
</Lms_Paypal>
</modules>
</config>
Lösung
Du gehst in die falsche Richtung /app/code/local/Lms/Paypal/etc/config.xml
und Modelldatei
/app/code/local/Lms/Paypal/Model/Express/Checkout.php
Ersetzen config.xml
Dateicode von
<?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>
Zu
<?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>
Ersetzen Sie auch den Code in der Datei app/code/local/Lms/Paypal/Model/Express/Checkout.php
aus
public function prepareOrderReview($token = null)
{
parent::prepareOrderReview($token);
$this->_quote->setMayEditShippingAddress(false);
$this->_quote->setMayEditShippingMethod(false);
$this->_ignoreAddressValidation();
$this->_quote->collectTotals()->save();
}
Zu
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();
}
}