Ich habe einen Controller, bei dem ich auf der Checkout-Seite einen Rabatt gewähren kann. Jetzt kann ich die Preisänderung sehen, sobald ich die Seite aktualisiert habe.
Ich suche nach einer Lösung, um den Preis mit einer Js-Datei zu aktualisieren.
define([
'jquery',
'Magento_Checkout/js/action/get-totals'
], function ($, getTotalsAction) {
"use strict";
$.ajax({
method: "post",
url: demoUrl, //your ajax Url
data: {/*here post data*/},
dataType: "html",
success: function (resp) {
//below two lines refershing cart summary
var deferred = $.Deferred();
getTotalsAction([], deferred); //this function already created in Magento_Checkout/js/action/get-totals.js file
}
});
});
Aber wenn ich dieses Skript in meinen Controller einfüge, passiert nichts!
Hat jemand eine Idee, wie man den Preis aktualisieren kann, ohne die Seite zu aktualisieren?
Ich weiß, dass Magento 2 standardmäßig eine Funktion hat, um dies zu tun. Wenn ich einen gültigen Gutscheincode eingebe, wird der Preis aktualisiert, ohne die Seite zu aktualisieren!
magento2
checkout
javascript
price
controllers
Alin Lupoiu
quelle
quelle
Antworten:
Verwenden Sie section.xml an folgendem Speicherort: vendor / module_name / etc / frontend / section.xml
quelle
Die Gesamtübersicht der Bestellung sollte nach dem Anwenden des benutzerdefinierten Gutscheins neu geladen werden. Wir sollten die Ereignishandle-Funktion für das benutzerdefinierte Formular hinzufügen, zum Beispiel: onclick, onchange. Wir können der Logik der Couponform folgen.
Das Gutscheinformular:
Wir können die Handle-Funktion für Klickereignisse finden:
vendor/magento/module-sales-rule/view/frontend/web/js/view/payment/discount.js
Es gibt einen Hinweis: Wir sollten
mage/storage,
-> verwendenlib/web/mage/storage.js
, um eine asynchrone POST-, GET-, PUT- und DELETE-Anforderung an den Server auszuführen. Zum Beispiel:vendor/magento/module-sales-rule/view/frontend/web/js/action/set-coupon-code.js
quelle
Die checkoutData werden im localStorage des Browsers gespeichert und bei bestimmten Aktionen aktualisiert.
Sie sollten den devdocs-Artikel über FPC-Holepunching hier lesen: http://devdocs.magento.com/guides/v2.0/config-guide/cache/cache-priv-priv.html
Um das Checkout-Datenobjekt zu aktualisieren, müssen Sie ein Abschnitts-Upgrade für Ihren Ajax-Aufruf wie folgt definieren: https://github.com/magento/magento2/blob/develop/app/code/Magento/Checkout/etc/frontend/sections. xml # L33
Beachten Sie, dass dieses Update (wie in den Devdocs beschrieben) nur bei POST- oder PUT-Anforderungen ausgelöst wird.
Magento sollte dann direkt nach erfolgreichem Abschluss Ihres Ajax-Aufrufs eine Anforderung zur Aktualisierung der Abschnitte für den Abschnitt "Checkout-Daten" auslösen
quelle
Wenn Sie einen Controller haben, müssen Sie eine Ajax-Funktion in benutzerdefinierten JS haben. Als Antwort auf diesen Ajax-Aufruf verwenden Sie also unter zwei Zeilen.
Und dafür müssen Sie ein Objekt erstellen, dh getTotolsAction, wie in Ihrem Fragencode in Ihrem benutzerdefinierten js gezeigt.
Hinweis: Verwenden Sie keinen JS-Code im Controller, funktioniert nicht.
quelle
Ich benutze diesen Ansatz:
quelle