OnePage Checkout - Zahlungsmethode je nach Versandart ausblenden


7

Ich verwende CE 1.9.0.1 und habe mein Modul korrekt erstellt und registriert, aber ich kann die Versandmethoden anscheinend nicht erkennen. Grundsätzlich möchte ich verstecken Nachnahme wenn Flatrate oder freies Verschiffen gewählt wird. Hier ist der Code, den ich für meine Beobachterklasse habe:

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 Versandmethoden-Codenamen oder Zahlungsmethoden-Codenamen verwendet habe, bin mir aber nicht sicher. Hat jemand einen Rat?

BEARBEITEN: Ich habe nur 3 Versandarten aktiviert:

  • Im Geschäft sammeln
    Titel = Im Geschäft sammeln
    Methodenname = Im Geschäft sammeln ( Erweiterungslink )
  • Flatrate-
    Titel = Standardversandmethode
    Name = Standardversand
  • Kostenloser Versand
    Titel = Kostenlose Versandart
    Name = Kostenlos

Hoffentlich können sich diese zusätzlichen Informationen als nützlich erweisen, um mir zu helfen!

Antworten:


7

Ich habe eine Antwort auf dieselbe Frage auf StackOverflow von Benutzer Elvarasan erhalten . Seine Antwort lieferte mir alles, was ich brauchte, um dies zum Laufen zu bringen.

Um einige Zahlungsmethoden basierend auf der Versandmethode auszublenden, müssen Sie Folgendes nicht beachten:

Alle Methoden (auf einer Seite auschecken) veröffentlichen die ausgewählten Methoden auf der nächsten Ebene. So können Sie die Versandart, die ausgewählt wurde, auf Zahlungsmethodenebene erhalten. Drucken Sie einfach die Post-Dinge aus

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

in diesem unten hinzufügen,

<?php print_r($_POST); ?>

So können Sie jetzt die Versandmethoden erhalten, die im vorherigen Schritt ausgewählt wurden. Und beachten Sie, dass Sie jetzt in derselben Datei nur eine einfache logische Bedingung (falls vorhanden) hinzufügen können, um die Zahlung auszublenden.

Zum Beispiel möchte ich hier die check / money orderZahlungsmethode ausblenden , wenn die Versandart ist flat. Hier lautet der Zahlungsmethodencode checkmo. Sie können den Zahlungsmethodencode erhalten, indem Sie einfach diese Variable wie echo $_code = $_method->getCode();in derselben Datei drucken . also hier 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;
    }
}

überprüft die Versandart und überspringt die Zahlungsmethode, die wir nicht anzeigen möchten. Das ist es. Bitte kommentieren Sie hier, wenn Sie Zweifel haben.

Hinweis:

 shipping_method => flatrate_flatrate
 payment_method   => checkmo

Wenn ich Owebia Shipping für Versandmethoden und IWD One Page Checkout habe, ist es die richtige Methode, um sich zu bewerben? Danke
Simbus82

0

Die obige Methode hat auch bei mir funktioniert, aber mein Dateispeicherort war anders. /httpdocs/app/design/frontend/base/default/template/onestepcheckout/material/onestepcheckout/payment_method.phtml

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.