2014-10-28 15 views
7

Ho fatto questa domanda su Magento Stackexchange senza alcun successo, quindi mi chiedo ora qui.Magento - OnePage Checkout - Nascondi metodo di pagamento in base al metodo di spedizione


sto usando Magento Community Edition 1.9.0.1 e hanno correttamente creato e registrato il mio modulo, ma io non riesco a rilevare i metodi di trasporto. Fondamentalmente, voglio nascondere Contanti alla consegna se Tariffa forfettaria o Viene scelta la spedizione gratuita. Qui è il codice che ho per la mia classe di osservatore:

class Kol_PaymentToggle_Model_Observer 
{ 
    public function paymentMethodIsActive(Varien_Event_Observer $observer) { 
     $event = $observer->getEvent(); 
     $method = $event->getMethodInstance(); 
     $result = $event->getResult(); 
     $quote = $observer->getEvent()->getQuote(); 
     $shippingMethod = $quote->getShippingAddress()->getShippingMethod(); 
     if($shippingMethod == "standardshipping" || $shippingMethod == "free") { 
      if($method->getCode() == 'cashondelivery') { 
       $result->isAvailable = false; 
      } 
     } 
    } 
} 

Sto indovinando che non ho usato i nomi in codice metodo corretto di trasporto o nomi in codice di metodo di pagamento, ma io sono sicuro. Qualcuno ha qualche consiglio?

EDIT: ho solo 3 metodi di spedizione abilitati:

  • Raccogliere In Store
    Title = Raccogliere in deposito
    Nome metodo = Raccogli In Store (Extension link)
  • Flat Rate
    Titolo = Consegna standard
    Nome metodo = Spedizione standard
  • di trasporto
    Title = Consegna gratuita
    Nome metodo = libero

EDIT 2: uscita di config.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Kol_PaymentToggle> 
      <version>0.0.1</version> 
     </Kol_PaymentToggle> 
    </modules> 
    <frontend> 
     <events> 
      <payment_method_is_active> 
       <observers> 
        <paymentfilter_payment_method_is_active> 
         <type>singleton</type> 
         <class>Kol_PaymentToggle_Model_Observer</class> 
         <method>paymentMethodIsActive</method> 
        </paymentfilter_payment_method_is_active> 
       </observers> 
      </payment_method_is_active> 
     </events> 
    </frontend> 
</config> 

Speriamo che questa informazione supplementare può rivelarsi utile ad aiutare me!

+0

puoi dirmi per favore su quale evento il codice è attivo? –

+0

Ciao Amit. È pensato per sparare sul checkout onepage nel punto in cui la persona deve scegliere un metodo di pagamento. – maGz

+0

Can out xml code –

risposta

9

Per quanto mi risulta, si sta tentando di nascondere alcuni metodi di pagamento in base al metodo di spedizione. Per questo non è necessario osservare le cose. Semplicemente puoi farlo, seguimi,

Ogni metodo (in una pagina di controllo) pubblica i metodi che vengono scelti al livello successivo. in modo da poter ottenere il metodo di spedizione scelto, in base al metodo di pagamento. Basta stampare le cose pubblicare in

app/design/frontend/base/default/template/checkout/onepage/payment/methods.phtml 

in questo aggiungi qui sotto uno,

<?php print_r($_POST); ?> 

Così ora è possibile ottenere i metodi di spedizione che vengono scelti passaggio precedente. E nota ora, puoi aggiungere una semplice logica (se esiste) nello stesso file per nascondere il pagamento,

Ad esempio, qui voglio nascondere il metodo di pagamento check/money order, se il metodo di spedizione è flat. Qui il codice del metodo di pagamento è checkmo. puoi ottenere il codice del metodo di pagamento semplicemente stampando quella variabile come echo $_code = $_method->getCode(); nello stesso file.ecco basta aggiungere semplice se il resto,

<?php 
    $methods = $this->getMethods(); 


    $oneMethod = count($methods) <= 1; 
?> 
<?php if (empty($methods)): ?> 
    <dt> 
     <?php echo $this->__('No Payment Methods') ?> 
    </dt> 
<?php else: 
    foreach ($methods as $_method): 
     echo $_code = $_method->getCode(); 


if($_POST['shipping_method'] == 'flatrate_flatrate') { 
if($_code == 'checkmo') { 
    continue; 
} 
} 
?> 

Qui,

if($_POST['shipping_method'] == 'flatrate_flatrate') { 
if($_code == 'checkmo') { 
    continue; 
} 
} 

controlla il metodo di spedizione e saltare il metodo di pagamento che non vogliamo visualizzare. Questo è tutto. Si prega di commentare qui se avete qualche dubbio.

Nota:

shipping_method => flatrate_flatrate 
paymet_method => checkmo 
+0

@ Elvarasan: Grazie! Sapevo che avrei dovuto modificare il PHTML. ha molto più senso Sovrascriverò il PHTML per il mio sottotema – maGz

+0

Domanda: dove inserirò ' ' – maGz

+0

ah, non importa, ho capito dove – maGz

0

Oltre alla soluzione per l'OnePage Checkout IWD fornito da @ Simbus82:

$shipping = Mage::getSingleton('checkout/session')->getQuote()->getShippingAddress()->getShippingMethod(); 

foreach ($methods as $_method): 
     $_code = $_method->getCode(); 
     if ($shipping == 'matrixrate_matrixrate_140' or $shipping == 'matrixrate_matrixrate_148') { 
      if($_code != 'cashondelivery') { 
       continue; 
      } 
     } 
0

Sebbene the accepted answer opere, non è una soluzione elegante in quanto viene richiesto noi per controllare i dati del post in un file phtml che non è un buon metodo. Invece, dovresti assolutamente cercare un evento per fare questo lavoro.

Per fortuna abbiamo un evento perfetto per fare questo lavoro e che è payment_method_is_active. Si prega di vedere the detailed answer here.

In pratica, è necessario impostare il metodo di pagamento inattivo tramite questo metodo, come si può vedere nella risposta.

Problemi correlati