Спливаю на міні-картці, коли я додаю продукт у кошик magento 2


15

Я використовую magento 2.0.7, і те, що я намагаюся зробити, - це спливати кошик (верхній правий кошик ajax minicart), коли я додаю до нього продукт, в основному запускаю його. Я спробував додати клас "showcart" до мого класу додавання до кошика, але якщо я це зробив, кнопка просто відкриває кошик і більше не додає товар.

Відповіді:


36

Це моя перша відповідь на цьому сайті. Я намагаюся зробити цю роботу останні два дні, і, нарешті, мені вдалося змусити її працювати, тому мені хотілося б поділитися нею.

Перш за все вам потрібно створити модуль:

  • registration.php
  • тощо / 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 файл (компонент), приєднавши його до батьківського діви minicart. У цьому випадку [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) міні-картка повинна бути відкрита.

І це все, просте завдання з великою кількістю теорії. Сподіваюся, це допомагає.


Це спрацювало як шарм. Ткс!
— medina

Здається, добре виправлення, чому для цього потрібен модуль? Чи не внесете зміни до вашої теми однакового ефекту?
— Бен Крук

На додаток до відповіді вище від @pinicio: Зауважте, що рішення працюватиме лише у тому випадку, якщо ajax буде використаний для функції додавання в кошик: magento.stackexchange.com/questions/125681/…
— Soeren

1
Він працює на оновлення кошика, як коли ми додаємо продукт, він працює, але він не повинен працювати, коли вилучаємо товар з кошика. але його робота і в той час.
— Ronak Chauhan

Якщо я спробую видалити елемент із міні-кошика, предмет не видаляється..є), як тільки я натискаю на піктограму видалення, лише після оновлення сторінки видалений елемент відображається
— Sushivam

6

Це можна зробити, просто змінивши файл minicart.js.

Перейдіть до vendor/magento/Magento_Checkout/view/web/js/view/minicart.js

Під ініціалізацією: функція, ви побачите

$('[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
я спробував цей, але не спрацював, я промив кеш
— inrsaurabh

Переконайтеся, що у вас немає перебору цього постачальника файлів / magento / Magento_Checkout / view / web / js / view / minicart.js під вашою темою.
— Ajendra Panwar

1
Ніколи не слід змінювати основні файли безпосередньо. Натомість змініть її в межах своєї теми або спеціального модуля.
— pinicio

Радий, що вам допомогли :)
— Аджендра Панвар

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);
            });
        });
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.