2014-10-28 21 views
7

Ich habe diese Frage auf Magento Stackexchange ohne Erfolg gestellt, daher frage ich Sie hier.Magento - OnePage Checkout - Ausblenden Zahlungsart je nach Versandart


Ich bin mit Magento Community Edition 1.9.0.1 und korrekt erstellt haben, und mein Modul registriert, aber ich kann nicht scheinen, um die Versandmethoden zu erfassen. Grundsätzlich möchte ich Nachnahme, wenn Flat Rate oder Kostenloser Versand ist gewählt. Hier ist der Code, den ich für meinen Beobachter Klasse:

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; 
      } 
     } 
    } 
} 

Ich vermute, dass ich nicht die richtigen Versandart Codenamen oder Zahlungsmethode Codenamen verwendet, aber ich bin nicht sicher. Hat jemand einen Rat?

EDIT: ich nur 3 Versandarten aktiviert:

  • In Store sammeln
    Title = Collect in Store
    Methodenname In Store Collect = (Extension link)
  • Flat Rate
    Titel = Standardlieferung
    Methodenname = Standardversand
  • Kostenloser Versand
    Title = kostenlose Lieferung
    Methode Name = Freie

EDIT 2: Ausgabe von 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> 

Hoffentlich zusätzliche nützliche Informationen zu helfen, unter Beweis stellen können mich!

+0

Können Sie mir bitte sagen, auf welchem ​​Ereignis der Code Feuer ist? –

+0

Hallo Amit. Es ist beabsichtigt, auf der Onepage-Kasse an dem Punkt zu feuern, an dem die Person eine Zahlungsmethode wählen muss. – maGz

+0

Kann xml code –

Antwort

9

Ich habe versucht, einige Zahlungsmethoden basierend auf der Versandmethode zu verbergen. Dazu müssen Sie die Dinge überhaupt nicht beobachten. Einfach können Sie dies tun, folgen Sie mir einfach,

Alle Methoden (auf einer Seite auschecken) post die Methoden, die auf die nächste Ebene gewählt werden. So können Sie die gewählte Versandart in der Zahlungsart wählen. Drucken Sie einfach die Post Dinge in

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

in diesem Add unten ein,

<?php print_r($_POST); ?> 

So, jetzt können Sie die Versandarten erhalten, die vorherigen Schritt ausgewählt werden. Und notieren Sie es, so können Sie jetzt nur einfache Logik hinzufügen (wenn sonst) Bedingung in der gleichen Datei zum Verbergen der Zahlung,

Zum Beispiel möchte ich verstecken check/money order Zahlungsmethode, wenn Versandmethode ist flat. Hier lautet der Code für die Zahlungsmethode checkmo. Sie können den Code der Zahlungsmethode erhalten, indem Sie einfach die Variable wie echo $_code = $_method->getCode(); in derselben Datei drucken.so dass hier nur einfach hinzufügen, wenn sonst,

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

Hier

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

prüft die Versandart und Zahlungsmethode überspringen, die wir nicht wollen, angezeigt werden soll. Das ist es. Bitte kommentieren Sie hier, wenn Sie irgendwelche Zweifel haben.

Hinweis:

shipping_method => flatrate_flatrate 
paymet_method => checkmo 
+0

@Elvarasan: Danke! Ich wusste, dass ich stattdessen die PHTML modifizieren sollte. macht viel mehr Sinn. Ich überschreibe die PHTML für mein Unterthema – maGz

+0

Frage: wo würde ich bleiben? maGz

+0

ah, vergiss ich, wo – maGz

0

Neben der Lösung für die OnePage Kasse IWD provided by @ 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

Obwohl the accepted answer Werke, es ist keine elegante Lösung, da sie aufgefordert, Wir überprüfen die Post-Daten in einer PHP-Datei, die keine gute Methode ist. Stattdessen sollten Sie auf jeden Fall nach einer Veranstaltung suchen, um diese Aufgabe zu erledigen.

Glücklicherweise haben wir ein perfektes Ereignis für diesen Job und das ist payment_method_is_active. Bitte sehen Sie the detailed answer here.

Grundsätzlich müssen Sie die Zahlungsmethode über diese Methode inaktiv setzen, wie Sie in der Antwort sehen können.