[msMCD] Динамическое обновление мини-корзины miniShop2

Приветствую всех!
Компонент msMCD (mini cart dynamic) для miniShop2 — это рефакторинг старого компонента msMiniCartDynamic с рядом улучшений и предназначен для обновления мини корзины на лету — динамически. msMiniCartDynamic поддерживаться больше не будет.

Теперь не нужно самостоятельно добавлять скрипты на страницу, msMCD делает это сам. Все чанки переписаны на Fenom и Bootstrap4.

Возможности msMCD

  1. Динамическое обновление мини-корзины
  2. Добавление товара в корзину как кнопкой, так и ручным вводом, а также кнопками -/+. Опционально
  3. Анимация добавления товара (полёт картинки). Опционально
  4. Возможность выбора полей для передачи в мини-корзину. Опционально
  5. Удаление выбранного товара
Демо
Доступен в modstore.pro
Марат Марабар
24 мая 2018, 08:18
modx.pro
4
3 521
+7
Поблагодарить автора Отправить деньги

Комментарии: 34

Scorp Satex
24 мая 2018, 16:48
0
К сожалению ESET INTERNET SECURITY 11.1.54.0 не пускает на демо сайт ( extras.marabar.ru/ ), пишет:

Веб-сайт заблокирован
Эта веб-страница находится в списке веб-сайтов с потенциально опасным содержимым.
Доступ к нему заблокирован.
Написали бы заявку им, чтобы ваш сайт убрали из черного списка…
    Марат Марабар
    24 мая 2018, 17:39
    0
    Написал.
    А вообще, не понятна причина блокировки, и блокирует только ESET.

    Вы можете в настройках указать исключение для демо-сайта, чтобы зайти. Если надо, конечно.
    Антон
    24 мая 2018, 20:35
    +1
    Если товар удалить из корзины, то добавить его больше невозможно, в режиме ввода количества
    Yuriy
    06 июня 2018, 02:33
    0
    Доброго времени суток. Подскажите пожалуйста не могу разобраться почему не исчезает товар с корзины при удалении. Если добавлено несколько товаров. Количество меняется и сумма меняется и сообщение появляется что товар удален, но сам товар с корзины не уходит — остается. Корзина выводится в модальном окне fancybox
      Yuriy
      06 июня 2018, 02:42
      0
      И еще подскажите пожалуйста как добавит msMCDCount — в корзину (Вызываю этот снипет в msMCDMiniCartRowTpl но форма не работает ). Или подскажите где есть подробная дкументация.
      И еще вот тут — В системных настройка msmcd_animate_mini_cart — значение «Да», но картинка не летит
        Марат Марабар
        07 июня 2018, 14:32
        0
        В тех поддержке ответил. Обновил документацию, добавлен чанк msMCDProductsRowInputTpl с вызовом сниппета msMCDCount
        Aleksandr Suslov
        27 июня 2018, 23:21
        0
        Возможно ли передать в миникорзину опции (size, color) товара? Можно ли добавить инпут в миникорзине для изменения count товара товара?
          Марат Марабар
          27 июня 2018, 23:28
          0
          Возможно ли передать в миникорзину опции (size, color) товара?
          Да.
          Можно ли добавить инпут в миникорзине для изменения count товара товара?
          Инпут обязательно в тег form и атрибуты по примеру в чанке msMCDProductsRowInputTpl.
            Aleksandr Suslov
            28 июня 2018, 00:58
            0
            Супер. Вывел размеры без проблем. Спасибо, очень выручили!
              antonlynin
              21 ноября 2019, 11:48
              0
              Приветствую! А не подскажите как вы вывели размер в миникорзине? Спасибо!
          Ярослав
          18 сентября 2018, 01:49
          0
          Не выводятся картинки в Миникорзине так как расширение разное в img хранится jpeg а в реальности в папке small лежит картинка с расширением .jpg
          В чем может быть проблема — с настройками напутал что-то я, или в компоненте что-то не так?
            Марат Марабар
            18 сентября 2018, 04:28
            +1
            Это баг минишопа. Он генерирует и складывает в папку всё в формате .jpg, а в таблицу пишет .jpg только для small.
            У кастомных размеров оставляет оригинальное расширение. Даже .png записывает как .png
              Марат Марабар
              18 сентября 2018, 10:39
              +1
              Нет, пардон — я ошибся. Не туда посмотрел. Исправлю.
            Ivan
            15 октября 2018, 15:18
            0
            Здравствуйте!

            Столкнулся с проблемой, у меня в JS есть код:

            miniShop2.Callbacks.Cart.add.response.success = function(ol) {

            Который, в случае успешного добавления в корзину вызывает Ajax запрос и в нем запускается сниппет — $output = $modx->runSnippet('msProducts',$params);

            И выводит товар, который был добавлен в корзину.

            Но в таком случае он конфликтует с msMCD, товары в мини корзине обновляются только после перезагрузки страницы, в чем может проблема?
              Марат Марабар
              15 октября 2018, 15:30
              +1
              Добавляйте callback в массив, со своим названием, чтобы не было конфликтов.
              miniShop2.Callbacks.add('Cart.add.response.success', 'my_name_callback', function(ol) {
                  // тело функции
              });
                Ivan
                15 октября 2018, 18:01
                0
                Спасибо, теперь работает как нужно. А не подскажите, у меня точно такая же проблема и с другими сниппетами, такими как: msfavorites, то есть при клике на кнопку «Добавить в избранное» я вызываю ajax запрос и в запросе запускается сниппет msProducts, из-за чего происходит конфликт и как решать подобные проблемы с другими сниппетами?
              Алексей
              20 ноября 2018, 14:09
              0
              Я хочу протестировать на тестовом домене, планируется переход на другой домен сайта.
              Нужно ли будет приобретать компонент второй раз для другого домена?
                Марат Марабар
                20 ноября 2018, 18:18
                0
                Я точно не знаю, но мне кажется — нет. Если это ко мне вопрос.
                Лучше в тех. поддержке магазина спросить, или поискать на сайте — наверняка есть информация.
                Pavel
                03 декабря 2018, 14:53
                0
                Подскажите плиз, почему кнопки + — не активы? их нельзя нажать.
                  Pavel
                  05 декабря 2018, 10:41
                  0
                  Как вызывать это? Как сделать, чтобы кнопки + — стали активны?
                  Я могу их через инпут полностью написать, но тогда смысл в этом дополнении?
                    Pavel
                    05 декабря 2018, 10:45
                    0
                    msmcdcount.js:34 Uncaught ReferenceError: msMCDMiniCart is not defined
                    at HTMLDivElement.(msmcdcount.js:34)
                    at HTMLDocument.dispatch (jquery.js:5)
                    at HTMLDocument.v.handle (jquery.js:5)
                      Илья
                      09 февраля 2019, 22:41
                      0
                      у меня тоже самое! только с анимацией

                      msmcdminicart.js:127 Uncaught TypeError: Cannot read property 'top' of undefined
                      at Object.msMCDMiniCart.animationCart (msmcdminicart.js:127)
                      at HTMLButtonElement.(msmcdminicart.js:40)
                      at HTMLDocument.dispatch (jquery.min.js:3)
                      at HTMLDocument.r.handle (jquery.min.js:3)
                      msMCDMiniCart.animationCart @ msmcdminicart.js:127
                      (anonymous) @ msmcdminicart.js:40
                      dispatch @ jquery.min.js:3
                      r.handle @ jquery.min.js:3
                      Степан Прищепенко
                      27 марта 2019, 00:20
                      0
                      Приветствую, хороший компонент, но хотел отметить несколько вещей:
                      1. в папке модели должен быть metadata.mysql.php, хотя бы
                      с таким содержимым:
                      $xpdo_meta_map = array();
                      Иначе ловим ошибку.

                      2. В основном классе, метод инициализации есть, но не вызывается,
                      и там же pdo подключается, но не получает конфиг, следует
                      параметры в него не передашь, можно исправить вот так:

                      if ($this->pdoTools = $this->modx->getService('pdoTools')){
                      	  $this->pdoTools->setConfig($this->config, false);
                      	}
                      3. Ключ (хеш) конфигурации корзины, при ajax запросе передается,
                      но нинциализация не происходит, это значит как минимум pdo не получит конфиг из пункта 2.
                      Для этого инициализация может быть такой:

                      protected $initialized = false;
                      	public function initialize($config = array())
                          {
                              if ($this->initialized) return true;
                      
                              $this->config = array_merge($this->config, $config);
                      
                              if ($this->miniShop2 = $this->modx->getService('miniShop2')) {
                                  $this->miniShop2->initialize($this->ctx);
                              }
                              if ($this->pdoTools = $this->modx->getService('pdoTools')){
                                  $this->pdoTools->setConfig($this->config, false);
                              }
                      
                              $this->initialized = true;
                          }
                      А в handleRequest:

                      $tmp = $this->getSessionData();
                          $tmp = is_array($tmp) ? $tmp : array();
                          $this->initialize($tmp);
                      Ну и в сниппеты и плагины после успешной подгрузки класса:
                      $msMCD->initialize();
                      4. Чанк элемента в корзине содержит:
                      <input type="hidden" name="msmcd_id" value="{$item.id}">
                      Ошибкой было называть имя msmcd_id вместо id, так как это может сломать
                      работу других компонентов
                      , висящих на событиях изменения
                      товаров в корзине. Да и префикс msmcd_ не используется ни где.

                      5. При удалении товара вместо Cart.remove.response.success
                      нужно использовать:
                      miniShop2.Callbacks.add('Cart.remove.ajax.always', 'msmcd_remove', function(response) {
                                  var cur_responce = response.responseJSON || {}
                                  // console.log ("done args",cur_responce);
                                  // debugger;
                                  if (cur_responce && cur_responce.success){
                                      if ($('.ms2_product .msmcd-count').length) {
                                          $(msMCDMiniCart.formId + k + ' ' + msMCDCount.msmcdCount).val(0);
                                          $(msMCDMiniCart.formId + k + ' ' + msMCDCount.msmcdAction).val('cart/add');
                                      }
                      
                                      var sendData = {
                                          action: 'msmcd/chunk',
                                          ctx: msMCDMiniCart.ctx
                                      };
                                      msMCDMiniCart.send(sendData);
                                  }
                              });
                      Тогда будет правильно удалять товары.

                      Вроде после такого напильника, стало работать как нужно. Желаю творческих успехов!
                        Степан Прищепенко
                        27 марта 2019, 13:04
                        0
                        P.s.: в файле msmcdminicart.js
                        меняем
                        this.productId = 'input[name=msmcd_id]';
                        на
                        this.productId = 'input[name=id]';
                          Степан Прищепенко
                          02 апреля 2019, 22:45
                          0
                          в функции msMCDMiniCart.animationCart ошибка, тормозящая работу скрипта, нужно добавить проверку на существование картинки в форме:
                          if (!img.length) return;
                          img.clone()
                          Vadim
                          28 июля 2019, 21:21
                          0
                          Здравствуйте! Подскажите, может кто-то сталкивался. Использую плагин для корзины msMCD. Сайт мультиязычный.
                          При добавлении товара в корзину, например из языкового контекста «de», корзина обновляется, НО, в ней содержимое на русском контексте: текст кнопок, заголовки и т.д. Если обновить страницу, то в корзину подтягивается нужный контекст.
                            alexandr.skyrda
                            26 ноября 2019, 20:57
                            0
                            Uncaught ReferenceError: msMCDMiniCart is not defined
                            at HTMLDivElement.(msmcdcount.js:27)
                            at HTMLDocument.dispatch (Jquery_v_3-3-1.js:3)
                            at HTMLDocument.q.handle (Jquery_v_3-3-1.js:3)

                            ошибка при изменении количества
                            и как сделать, что бы добавлялся сразу 1 товар при нажатии на кноку «добавить в корзину»?
                              Степан Прищепенко
                              27 ноября 2019, 09:04
                              0
                              Тут же написано msMCDMiniCart — переменная не определена. Значит JS не подключился скорее всего.
                                alexandr.skyrda
                                27 ноября 2019, 13:24
                                0
                                я проверял через dev tools и вручную подключал, все равно такая проблема
                              Владимир Ребров
                              02 марта 2020, 20:05
                              0
                              Добрый день.

                              Заметил, что цена в миникорзине при изменении количества товаров на странице большой корзины меняется не сразу, а с задержкой 2 сек. При этом после других операций, например, удаления позиции из большой корзины, цена меняется мгновенно.

                              Не подскажете, по какой причине это может происходить?
                                Виктор
                                12 августа 2020, 11:36
                                0
                                Добрый день. Делаю сайт с мультиязычностью на localizator. Возникла проблема с переводом названий товаров. Нашел вот такое решение для обычной корзины minishop2.
                                Подскажите, пожалуйста, можно ли как-то это дело подружить с мини-корзиной? Тут параметры не поддерживаются или немного иначе что-то прописать надо?

                                {'!msMultiCurrencyCart' | snippet : [
                                                            'tpl' => 'cart.tpl',
                                                            'leftJoin' => '{
                                                                "localizator" : {
                                                                    "class" : "localizatorContent",
                                                                    "alias" : "localizator",
                                                                    "on" : "localizator.resource_id = msProduct.id"
                                                            	}
                                                            }',
                                                            'select' => '{ "localizator" : "msProduct.*, localizator.*, msProduct.id" }',
                                                            'where' => '{ "localizator.key" : "' ~ ('localizator_key' | option) ~ '", "localizator.active" : 1}',
                                                        ]}
                                  SEQUEL.ONE
                                  29 сентября 2020, 14:07
                                  0
                                  Возникла проблема с динамическим добавлением в корзину, почему то при клике на плюс добавляет сначало 1 товар, потом сразу 3, затем 7, 18, 26, 58 и т.д. Как это пофиксить?
                                    SEQUEL.ONE
                                    29 сентября 2020, 14:08
                                    0
                                    Да, такой баг в mFilter2 возникает
                                    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                    34