Aktualisieren Sie den Preis auf der Checkout-Seite, ohne Magento 2 zu aktualisieren


7

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!


Hallo. Hast du das erreicht?
Spiil

Hallo, ja, aber ich habe dies mit jQuery erreicht
Alin Lupoiu

Könnten Sie mir bitte Ihre Lösung mitteilen?
Spiil

Könnten Sie uns bitte Ihre Lösung mitteilen?
Condor

Teilen Sie Ihre Ajax-Call-Datei (gesamte JS-Datei), damit ich Ihnen helfen kann.
Glücklicher

Antworten:


1

Verwenden Sie section.xml an folgendem Speicherort: vendor / module_name / etc / frontend / section.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Customer:etc/sections.xsd">
    <action name="route/controller/actionname">
        <section name="cart"/>
        <section name="checkout-data"/>
    </action>
</config>  

0

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:

Geben Sie hier die Bildbeschreibung ein

Wir können die Handle-Funktion für Klickereignisse finden: vendor/magento/module-sales-rule/view/frontend/web/js/view/payment/discount.js

     apply: function() {
            if (this.validate()) {
                isLoading(true);
                setCouponCodeAction(couponCode(), isApplied, isLoading);
            }
        },

Es gibt einen Hinweis: Wir sollten mage/storage,-> verwenden lib/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



0

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


0

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.

 var deferred = $.Deferred();
 getTotalsAction([], deferred);

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.


0

Ich benutze diesen Ansatz:

require(['Magento_Checkout/js/action/get-totals'], function(a) { a([]); } );
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.