Reescreva o modelo para evitar a alteração do método de envio na fase de revisão do pedido na finalização da compra
-
29-09-2020 - |
Pergunta
Estou tentando substituir uma classe de modelo para evitar que os clientes alterem o endereço e o método de entrega no estágio (final) de revisão do pedido na finalização da compra, usando esta sugestão.Este é o ponto em que o cliente retornou do PayPal para verificar o pedido antes de finalmente clicar no botão 'Fazer pedido'.Nós pré-acordamos os custos de envio com nossos clientes por meio de um orçamento, portanto, dar-lhes a opção de alterar o método de envio não faz sentido.
Esta é minha primeira tentativa de fazer isso no Magento.Parece que estou aproximadamente lá, mas não está funcionando:
Se alguém com experiência em substituir classes de modelo no Magento pudesse me dizer onde estou errando, seria fantástico.
(1)
(a) Crie /app/code/local/Lms/Paypal/Model/Express e copie em /app/code/core/Mage/Paypal/Model/Express/Checkout.php
(b) Renomeie a classe em Checkout.php de:Mage_Paypal_model_express_checkout para:Lms_Paypal_Model_Express_Checkout estende Mage_Paypal_Model_Express_Checkout
(c) Limpe o corpo da classe e substitua apenas por esta função:
/**
* 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) Agora crie o diretório /app/code/local/Lms/Paypal/etc/
(b) Crie o arquivo Config.xml nesse diretório e coloque este código 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) Agora vá para /app/etc/modules/
(b) Crie Lms_Paypal.xml nesse diretório e coloque este código em Lms_Paypal.xml:
<?xml version="1.0"?>
<config>
<modules>
<Lms_Paypal>
<active>true</active>
<codePool>local</codePool>
</Lms_Paypal>
</modules>
</config>
Solução
Você está indo para o lado errado /app/code/local/Lms/Paypal/etc/config.xml
e arquivo de modelo
/app/code/local/Lms/Paypal/Model/Express/Checkout.php
Substituir config.xml
código do arquivo 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>
Para
<?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>
Substitua também o código no arquivo app/code/local/Lms/Paypal/Model/Express/Checkout.php
de
public function prepareOrderReview($token = null)
{
parent::prepareOrderReview($token);
$this->_quote->setMayEditShippingAddress(false);
$this->_quote->setMayEditShippingMethod(false);
$this->_ignoreAddressValidation();
$this->_quote->collectTotals()->save();
}
Para
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();
}
}