2016-06-13 13 views
5

Ich bin neu in Magento 2. Jeder kennt eine Möglichkeit, eine Versandmethode basierend auf einem Attribut mit den Produkten im Warenkorb zu deaktivieren. Nehmen wir an, wir möchten die Abholung von Geschäften nur für bestimmte Produkte aktivieren. Beim One-Page-Checkout werden diese mit post/rest/de/V1/guest-carts/SESSION_ID/schedule-shipping-methods aktualisiert, haben aber das Modul-checkout und das Modul-quote ausprobiert und können trotzdem nicht finden, wo dieser Code ist Ich kann es verlängern. Wäre hilfreich, wenn jemand das schon einmal gemacht hätte.Magento 2 Filter Versandmethoden basierend auf Produkt-Attribut

Dank

Antwort

2

Wahrscheinlich mehr als ein Weg, dies zu tun, aber meine Methode der Wahl war ein Plugin für \ Magento \ Shipping \ Modell \ Versand, insbesondere die collectRates() Funktion zu erstellen. Zugegeben, unsere Anforderungen waren spezifischer als Ihre (unten).

Grundlogikfluss ist ...

collectRates()(Unveränderte Funktion in \ Magento \ Shipping \ Modell \ Shipping, Sammelt Raten für alle Versandmethoden)

afterCollectRates()(Plugin)

  • An dieser Stelle haben alle Bienenversandart n genannt und Preise in unserem $ Anfrage Objekt gespeichert.
  • können Sie Produkte bestimmen, die über $ Anfrage- in den Warenkorb gelegt sind> getAllItems()
    • HINWEIS: Kind/Eltern-Produkte sind separate Elemente, und auf dem Speicher Konfiguration abhängig, die eine oder andere kann nicht Haben Sie das benutzerdefinierte Attribut, das Sie sehen möchten.
  • Sie können alle Versandarten/Preise über $ request-> getResult() siehe -> getAllRates()
  • ich nicht meine Abhilfe gefunden, war eine Rate eine Kernfunktion zu entfernen, zu .. in Rate.
    • Unset alle Daten
    • zu entfernen, nachdem alle Tarife, eine foreach() Schleife speichern sie in einem TempArray (mit etwas Logik nicht hinzufügen, wenn Kosten == 0, etc verwenden modifiziert werden .)
    • nun bündig und setzen Sie alle vorhandenen Preise über $ request-> getResult() -> reset()
    • Schließlich fügen Sie die Preise von Ihrem TempArray zurück in


Je Wie Sie die Preise berechnen, möchten Sie vielleicht auch die verschiedenen Versandmethoden erweitern, so dass Sie diese vollständig umgehen können, wenn bestimmte Produkte im Warenkorb sind (wahrscheinlich nicht für Ihren Anwendungsfall, sondern für jeden, der UPS/FedEx/etc. deaktivieren möchte).Preise)


Wie bereits erwähnt, waren unsere Anforderungen umfangreicher und wir hatten auch eine beforeCollectRates() Funktion, die tatsächlich die Produktpalette und eine andere Logik erstellt (wir verschiedene Versandarten zu beschränken hatte, fügen Sie für bestimmte Produkte Handhabung, und dimensionale Logik verwenden, um eine Liste von Versandkartons zu erstellen, die an UPS/FedEx usw. für den tatsächlichen CollectRates() - Teil gesendet werden.)

Verwandte Themen