カートに商品を追加するとミニカートがポップアップしますmagento 2


15

私はmagento 2.0.7を使用しています。私がやろうとしているのは、製品を追加するときにカート(右上のカートajaxミニカート)をポップアップし、基本的にトリガーすることです。「カートに追加」ボタンクラスに「showcart」クラスを追加しようとしましたが、追加した場合、ボタンはカートを開くだけで、製品は追加されません。

回答:


36

これがこのサイトでの最初の回答です。過去2日間、この作品を作ろうとして苦労してきましたが、ようやく機能させることができたので、共有したいと思います。

まず、モジュールを作成する必要があります。

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

ステップ1.サイトにテンプレートを追加する必要があります。その方法は、default.xmlを使用することです

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

ステップ2.次に、minicart_open.phtml内で、jsファイル(コンポーネント)をミニカートの親divにアタッチして呼び出す必要があります。この場合、[data-block = 'minicart']。詳細については、このリンクを参照してください。

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

ステップ3.最後に、minicart_open.js内のマジックコード:

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");
            });
        });
    }
});

基本的に、このコードはファイルの機能を拡張しvendor/magento/module-checkout/view/frontend/web/js/view/minicart.js、AJAX呼び出しが完了したら(contentUpdated)、ミニカートを開く必要があることを示しています。

そして、それだけです。多くの理論が裏付けられた単純なタスクです。それが役に立てば幸い。


それは魅力のように働いた。Tks!
メディナ

良い修正のようですが、なぜこれがモジュールである必要があるのですか?テーマにこれらの変更を加えても同じ効果はありませんか?
ベン・クルック

:AJAXはカート機能を追加するために使用されている場合解決策が唯一の仕事はすることに注意してください:@pinicioから上記の回答に加えてmagento.stackexchange.com/questions/125681/...
Soerenの

1
製品を追加すると機能するのでカートの更新で機能しますが、カートからアイテムを削除すると機能しません。しかし、その時点でも機能しています。
ロナックチャウハン

ミニカートからアイテムを削除しようとすると、アイテムは削除されません..)削除アイコンをクリックすると、ページの更新後にのみ、削除されたアイテムが再取得されます
-Sushivam

6

minicart.jsファイルを変更するだけで実行できます。

案内する vendor/magento/Magento_Checkout/view/web/js/view/minicart.js

initialize:functionの下に表示されます

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

関数をこのコードに置き換えます。

$('[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);
            });
        });

要件に応じてタイムアウトを変更できます。

コマンドを実行してファイルをアップロードし、キャッシュを消去します

php bin/magento cache:clean

乾杯!


1
私はこの1つを試みたが、働いていない、私はキャッシュフラッシュ
inrsaurabh

テーマの下でこのファイルvendor / magento / Magento_Checkout / view / web / js / view / minicart.jsのオーバーライドがないことを確認してください。
アジェンドラパンワー

コアファイルを直接変更しないでください。代わりに、テーマまたはカスタムモジュール内で変更してください。
ピニシオ

それはあなたを助けてくれてうれしいです:)
アジェンドラパンワー

1
これは、Magento 2.2.3の魅力のように機能しました。Tksヒープ!
メディナ

4

代替ソリューション:チェックvendor/magento/module-catalog/view/frontend/web/js/catalog-add-to-cart.js行:100

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

カスタムjsファイルを追加できます。

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

jsで:

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

2

テンプレートコードの下のminicart.phtmlでこのコードを使用できます。私はこのコードを使用しており、より良く機能しています。あなたはそれを試すことができます。ありがとう。

<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>

その働きに感謝します... Magento JSフローを学びたいです。どのように機能するかリンクを共有してください
55840

1

上記の答えは機能しますが、閉じ括弧がありません:

            $('[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);
            });
        });
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.