Ich mache eine neue Versandart und muss eine neue Spalte zu den Versandkosten hinzufügen. Die Daten stammen aus benutzerdefinierten Versandmethodeneinstellungen, z. B. Methodenbeschreibung. Oder ein Eingabefeld, in das der Kunde Informationen hinzufügen kann (Daten würden wahrscheinlich im Angebot und später in der Reihenfolge gespeichert).
Der wahrscheinlich einfachste Teil von allen ist die Implementierung von Vorlagen mithilfe von
Magento_Checkout/web/template/shipping.html
Es braucht nur das
<div data-bind="text: method.description"></div>
Das Problem ist, dass ich nicht herausfinden kann, wie benutzerdefinierte Daten hinzugefügt werden. Es reicht nicht aus, dies hinzuzufügen:
public function collectRates(RateRequest $request)
{
if (!$this->isActive()) return false;
$method = $this->rateMethodFactory->create();
$method->setData('carrier', $this->getCarrierCode());
$method->setData('carrier_title', $this->getConfigData('title'));
$method->setData('method_title', $this->getConfigData('title'));
$method->setData('method', $this->getCarrierCode());
$method->setPrice($this->_price);
$method->setData('cost', $this->_price);
// custom
$method->setData('description', $this->getConfigData('description'));
$result = $this->rateResultFactory->create();
$result->append($method);
return $result;
}
Daten für HTML stammen von js Raten (), die Daten von der API abrufen:
<route url="/V1/carts/:cartId/shipping-methods" method="GET">
<service class="Magento\Quote\Api\ShippingMethodManagementInterface" method="getList"/>
<resources>
<resource ref="Magento_Cart::manage" />
</resources>
</route>
Danach gibt es viele Schritte, während tatsächlich etwas gesammelt wird. ich fand
Magento \ Quote \ Model \ Cart \ ShippingMethodConverter modelToDataObject ()
Das sah am vielversprechendsten aus, aber wenn ich versuche, mein Attribut hinzuzufügen, passiert nichts.
Meine Frage ist also, ob es tatsächlich eine Möglichkeit gibt, neue Daten zu den Versandkosten hinzuzufügen. In M1 war es möglich. Es wäre verrückt, wenn M2 es nicht möglich wäre.
Es gibt viele Gründe, warum dies möglich sein sollte. Zum Beispiel, wenn ich die Abholmethode im Geschäft mit mehreren Dropdown-Geschäften oder ähnlichem durchführen wollte.
quelle
Antworten:
Sie müssen dies tun, indem Sie eine Beschreibung als Erweiterungsattribut wie folgt hinzufügen:
/etc/extension_attributes.xml sollte folgendermaßen aussehen:
Fügen Sie in der Datei etc / di.xml ein Plugin zum Überschreiben von modelToDataObject () in Magento \ Quote \ Model \ Cart \ ShippingMethodConverter wie folgt hinzu:
Die Plugin-Datei Vendor \ module \ Plugin \ Carrier \ Description.php sollte folgendermaßen aussehen:
Nach all dem erhalten Sie diese Beschreibung auf fronend wie folgt:
quelle
Die am besten bewertete Antwort funktioniert nicht, da er vergessen hat, den Wert "description" in der Klasse \ Magento \ Quote \ Model \ Quote \ Address \ Rate festzulegen. Wenn wir kein Plugin erstellen, um den Beschreibungswert für diese Klasse festzulegen , gibt $ rateModel-> getMethodDescription () immer leer zurück. Hier ist eine voll funktionsfähige Version der Lösung:
[Anbieter] / [Modul] /etc/extension_attributes.xml
[Anbieter] / [Modul] /etc/di.xml
[Anbieter] / [Modul] /Plugin/Carrier/Description.php
Und schlussendlich:
[Anbieter] / [Modul] /Plugin/Quote/Address/Rate.php
Vergessen Sie nicht, bin / magento setup: di: compile auszuführen, da sonst das erweiterte Attribut nicht generiert wird.
Sie können die Daten folgendermaßen an Ihre Vorlage binden:
Oder als Kommentar wie folgt:
Vergessen Sie auch nicht, $ method-> setDescription ('Ihre benutzerdefinierte Beschreibung hier') oder $ method-> setData ('description', 'Ihre benutzerdefinierte Beschreibung hier') in Ihrer benutzerdefinierten Carrier-Erweiterung zu verwenden (siehe die ursprüngliche Frage für Referenz).
quelle
Sie müssen die Methodennamen in der Schnittstellendatei deklarieren. Der Pfad für diese Datei lautet
Beispiel:
Deklarieren Sie die Konstante oben
Definieren Sie dann die Methode wie folgt
Dann müssen Sie der folgenden Datei Werte zuweisen
wie folgt
quelle