Ich versuche, ein benutzerdefiniertes Feld zwischen den Abschnitten Versandadresse und Versandart hinzuzufügen . Und ich will Werte dieses Feldes in beiden gespeichert werden quote
und sales_order
Tabellen schließlich. Dies ähnelt dem Hinzufügen eines Felds "Bestellkommentar", dieses Feld sollte jedoch direkt nach dem Abschnitt "Lieferadresse" und vor dem Abschnitt "Versandart" angezeigt werden.
Ich habe die Magento-Entwicklerhandbücher zum Hinzufügen eines benutzerdefinierten Felds und eines benutzerdefinierten Formulars zur Kaufabwicklung durchgearbeitet und bis zu einem gewissen Grad eine Lösung implementiert.
Was ich bisher gemacht habe:
- Das
checkout_index_index.xml
Layout wurde aktualisiert.uiComponent
Unter dem Punkt "Versandadresse" wurde ein neuer Container hinzugefügt . - Das Element (Feld), das ich benötige, wurde im Container hinzugefügt.
- Überschreiben Sie das
/js/view/shipping.js
undshipping.phtml
in meinem benutzerdefinierten Modul. - Ruft den oben erstellten Container
shipping.phtml
zwischen der Versandadresse und der Versandart auf (ähnlich wie beim Hinzufügen eines neuen statischen Formulars).
Jetzt wird das gewünschte Feld auf der Onpage-Kasse genau dort gerendert, wo ich es möchte. Aber ich habe unten Probleme getroffen.
Wie kann ich auf den Wert des benutzerdefinierten Felds zugreifen, das ich oben hinzugefügt habe? Ich versuche, den Wert in einem shippingAddress-Erweiterungsattribut zu speichern. Ich habe ein Mixin hinzugefügt,
setShippingInformationAction
das versucht, das Folgende zu tunshippingAddress['extension_attributes']['custom_field'] = shippingAddress.customAttributes['custom_field'];
Der obige Code schlägt jedoch tatsächlich fehl, da sich das Element nicht in der shipping-address-fieldset
. Ich könnte in der Lage sein, den Wert durch das window
Element zu erhalten. Aber gibt es eine Möglichkeit, über Magento darauf zuzugreifen?
- Gibt es eine Möglichkeit, den Wert dieses Elements im lokalen Cache-Speicher (
Magento_Checkout/js/checkout-data
) zu speichern, damit der Wert auch nach einer Seitenaktualisierung erhalten bleibt?
Antworten:
Aufgrund Ihrer Frage gehe ich davon aus, dass Sie Ihre Erweiterungsattribute bereits eingerichtet haben. Ich habe eine ähnliche Änderung vorgenommen und hoffe, dass meine Antwort hilft.
Erstellen Sie in Ihrem benutzerdefinierten Modul eine requirejs-config-Datei, um den Standardversandprozessor / -standard zu erweitern
Fügen Sie der Nutzlast Ihr Erweiterungsattribut hinzu.
Speichern Sie das Attribut in Ihrem Angebot mit einem Plugin (Ich bin nicht sicher, ob Sie hier einen Beobachter verwenden könnten, den ich nicht überprüft habe).
di.xml
SaveAddressInformation.php
Speichern Sie das Attribut in Ihrer Bestellung mit einer Observer events.xml
SaveCustomFieldToOrder.php
quelle
map *
.Erstellen Sie ein Plugin für diese
\Magento\Checkout\Block\Checkout\LayoutProcessor::process
Methode.Machen Sie auf diesem Pfad einen Eintrag in di.xml
Erstelle eine Plugin-Klasse in diesem Verzeichnis.
2 => Plugin-Klasse in diesem Verzeichnis erstellen.
app/code/CompanyName\Module\Model\Plugin\Checkout
}
Sobald dies erledigt ist, überprüfen Sie die Checkout-Seite.
quelle