Pop-up-Minicart, wenn ich ein Produkt in den Warenkorb legen magento 2

15

Ich verwende magento 2.0.7 und versuche, den Warenkorb (den Ajax-Minicart-Warenkorb oben rechts) zu öffnen, wenn ich ihm ein Produkt hinzufüge. Ich habe versucht, die "showcart" -Klasse zu meinen "Add to Cart" -Knopfklassen hinzuzufügen, aber wenn ich dies tue, öffnet der Knopf nur den Warenkorb und fügt das Produkt nicht mehr hinzu.

alexcr
quelle

Antworten:

36

Dies ist meine erste Antwort auf dieser Seite. Ich hatte in den letzten zwei Tagen Mühe, diese Arbeit zum Laufen zu bringen, und konnte sie endlich zum Laufen bringen. Ich denke, es wäre schön, sie zu teilen.

Zunächst müssen Sie ein Modul erstellen:

  • registration.php
  • etc / module.xml
  • view / frontend / layout / default.xml
  • view / frontend / templates / minicart_open.phtml
  • view / frontend / web / js / view / minicart_open.js

Schritt 1. Sie müssen der Site eine Vorlage hinzufügen. Verwenden Sie dazu die Datei default.xml

<referenceContainer name="content">
  <block class="Magento\Framework\View\Element\Template" name="minicart.autoopen" template="Company_ModuleName::minicart_open.phtml"/>
</referenceContainer>

Schritt 2. Dann müssen wir in minicart_open.phtml unsere js-Datei (Komponente) aufrufen, indem wir sie an das übergeordnete div der minicart anhängen. In diesem Fall [data-block = 'minicart']. Siehe diesen Link für weitere Details.

<script type="text/x-magento-init">
{
     "[data-block='minicart']" : {
        "Company_ModuleName/js/view/minicart_open" : {}
     }
}
</script>

Schritt 3. Und schließlich in minicart_open.js den magischen Code:

define(["jquery/ui","jquery"], function(Component, $){
    return function(config, element){
        var minicart = $(element);
        minicart.on('contentLoading', function () {
            minicart.on('contentUpdated', function () {
                minicart.find('[data-role="dropdownDialog"]').dropdownDialog("open");
            });
        });
    }
});

Grundsätzlich erweitert dieser Code die Funktionalität der Datei vendor/magento/module-checkout/view/frontend/web/js/view/minicart.jsund besagt, dass nach Abschluss des AJAX-Aufrufs (contentUpdated) der Minicart geöffnet werden sollte.

Und das war es auch schon, eine einfache Aufgabe mit viel Theorie dahinter. Ich hoffe es hilft.

pinicio
quelle
Es wirkte wie ein Zauber. Tks!
Medina
Scheint eine gute Lösung zu sein, warum muss dies ein Modul sein? Würden diese Änderungen in Ihrem Thema nicht den gleichen Effekt haben?
Ben Crook
Zusätzlich zu der obigen Antwort von @pinicio: Beachten Sie, dass die Lösung nur funktioniert, wenn Ajax für die Funktion zum Hinzufügen zum Einkaufswagen verwendet wird
Soeren
1
Es funktioniert bei der Warenkorbaktualisierung, wenn wir ein Produkt hinzufügen. Es sollte jedoch nicht funktionieren, wenn wir einen Artikel aus dem Warenkorb entfernen. Aber es funktioniert zu dieser Zeit auch.
Ronak Chauhan
Wenn ich versuche, einen Artikel aus dem Mini-Einkaufswagen zu löschen, wird der Artikel nicht gelöscht.) Sobald ich auf das Löschsymbol
klicke
6

Sie können dazu einfach die Datei minicart.js ändern.

Navigiere zu vendor/magento/Magento_Checkout/view/web/js/view/minicart.js

Unter initialize: function sehen Sie

$('[data-block="minicart"]').on('contentLoading', function (event) {

Ersetzen Sie die Funktion durch diesen Code.

$('[data-block="minicart"]').on('contentLoading', function (event) {
            addToCartCalls++;
            self.isLoading(true);
            $('[data-block="minicart"]').on('contentUpdated', function ()  {
                $('[data-block="minicart"]').find('[data-role="dropdownDialog"]').dropdownDialog("open");       
                setTimeout(function() {
                $('[data-block="minicart"]').find('[data-role="dropdownDialog"]').dropdownDialog("close");
            }, 4000);
            });
        });

Sie können das Zeitlimit gemäß Ihren Anforderungen ändern.

Laden Sie die Datei hoch und leeren Sie den Cache, indem Sie den Befehl ausführen

php bin/magento cache:clean

Prost!

Ajendra Panwar
quelle
1
Ich habe es versucht, aber nicht funktioniert, ich habe den Cache
geleert
Stellen Sie sicher, dass Sie unter Ihrem Thema keinen Override zu dieser Datei vendor / magento / Magento_Checkout / view / web / js / view / minicart.js haben.
Ajendra Panwar
Sie sollten die Kerndateien niemals direkt ändern. Ändern Sie es stattdessen in Ihrem Design oder in einem benutzerdefinierten Modul.
Pinicio
Ich bin
1
Es funktionierte wie ein Zauber auf Magento 2.2.3. Tks Haufen!
Medina
4

alternative lösung: check vendor/magento/module-catalog/view/frontend/web/js/catalog-add-to-cart.jsline: 100

$(document).trigger('ajax:addToCart', form.data().productSku);

Wir könnten eine benutzerdefinierte js-Datei hinzufügen:

<script type="text/x-magento-init">
{
    "*": {
        "Magento_Catalog/js/view/minicart-open": {}
    }
}

Im js:

$(document).on('ajax:addToCart', function () {#code here...}
Jonas Chen
quelle
2

Sie können diesen Code einfach in Ihrer minicart.phtml unterhalb Ihres Vorlagencodes verwenden. Ich benutze diesen Code und er funktioniert besser. du kannst es versuchen. Vielen Dank.

<script type="text/javascript">
    require(['jquery'], function ($) {
        $('.minicart-wrapper').on('contentLoading', function (event) {
            $('[data-block="minicart"]').on('contentUpdated', function () {
                $('[data-block="minicart"]').find('[data-role="dropdownDialog"]').dropdownDialog("open");
                setTimeout(function () {
                    $('[data-block="minicart"]').find('[data-role="dropdownDialog"]').dropdownDialog("close");
                }, 4000);
            });
        });
    });
</script>
Rafiqul Islam
quelle
Dank seiner Arbeit ... Ich möchte Magento JS Flow lernen. Wie es funktioniert, teilen Sie bitte einen Link
55840
1

Die obige Antwort funktioniert, aber die schließende Klammer fehlt:

            $('[data-block="minicart"]').on('contentLoading', function (event) {
            addToCartCalls++;
            self.isLoading(true);
                $('[data-block="minicart"]').on('contentUpdated', function ()  {
                    $('[data-block="minicart"]').find('[data-role="dropdownDialog"]').dropdownDialog("open");

                setTimeout(function() {
                $('[data-block="minicart"]').find('[data-role="dropdownDialog"]').dropdownDialog("close");
                }, 4000);
            });
        });
Rich S
quelle