Спливаю на міні-картці, коли я додаю продукт у кошик 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.