Schreiben Sie das Modell neu, um zu verhindern, dass sich die Versandart in der Bestellprüfungsphase des Bezahlvorgangs ändert

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

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:

Review Order Shipping Method is still editable

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> 
War es hilfreich?

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();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top