Réécrire le modèle pour éviter de modifier la méthode d'expédition lors de l'étape de révision de la commande lors du paiement

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

Question

J'essaie de remplacer une classe de modèle pour empêcher les clients de modifier l'adresse et la méthode de livraison lors de l'étape (finale) de révision de la commande lors du paiement, en utilisant cette proposition.C'est le moment où le client est renvoyé de PayPal afin de vérifier la commande avant de finalement cliquer sur le bouton « Passer la commande ».Nous convenons au préalable des frais d'expédition avec nos clients via un devis, donc leur donner la possibilité de modifier le mode d'expédition n'a aucun sens.

C'est ma première tentative de faire cela dans Magento.J'ai l'impression d'être presque là mais ça ne marche pas :

Review Order Shipping Method is still editable

Si quelqu'un ayant de l'expérience dans la substitution de classes de modèles dans Magento pouvait me dire où je me trompe, ce serait fantastique.

(1)
(a) Créez /app/code/local/Lms/Paypal/Model/Express et copiez-le dans /app/code/core/Mage/Paypal/Model/Express/Checkout.php

(b) Renommez la classe dans Checkout.php de :Mage_PayPal_Model_Express_Checkout À:Lms_Paypal_Model_Express_Checkout étend Mage_Paypal_Model_Express_Checkout

(c) Effacez le corps de la classe et remplacez-le par cette fonction :

/**
 * 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) Créez maintenant le répertoire /app/code/local/Lms/Paypal/etc/
(b) Créez le fichier Config.xml dans ce répertoire et placez-y ce code :

<?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) Allez maintenant dans /app/etc/modules/
(b) Créez Lms_Paypal.xml dans ce répertoire et mettez ce code dans Lms_Paypal.xml :

<?xml version="1.0"?>  
<config>  
    <modules>  
        <Lms_Paypal>  
            <active>true</active>  
            <codePool>local</codePool>  
        </Lms_Paypal>  
    </modules>  
</config> 
Était-ce utile?

La solution

Tu vas dans le mauvais sens /app/code/local/Lms/Paypal/etc/config.xml et fichier modèle

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

Remplacer config.xml code de fichier de

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

Remplacez également le code dans le fichier app/code/local/Lms/Paypal/Model/Express/Checkout.php depuis

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();
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top