Вызов msCart через ajax и совместно с msMiniCart

Проблемная страничка new.kami-kadze.ru/sets/

Собственно имеем:

На странице по умолчанию вызывается только msMiniCart.

При клике на msMiniCart аяксом в попап подгружается msCart. В DOM отлично встраивается элемент с id=«msCart» и правильным содержимым корзины.

Однако при добавлении новых товаров обновляется только миникорзина. Содержимое полной корзины не меняется.
Пробовал вызов без аякса — аналогичная проблема.
Перерыл все похожие вопросы и ничего не решилось
Антон ХайЭксель
10 марта 2014, 03:27
modx.pro
4
6 267
0

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

Василий Наумкин
10 марта 2014, 07:37
0
У тебя большая корзина загружается только один раз, а потом modal ее кэширует. Это хорошо видно по запросам в консоли браузера.

Да и в документации описано:
If a remote URL is provided, content will be loaded one time via jQuery's load method and injected into the .modal-content div.
Так что, нужно загружать своим скриптом, вручную вызывая modal.
    Антон ХайЭксель
    10 марта 2014, 07:55
    0
    Это да. modal встроил элемент в DOM при первом клике. Дальше хочется чтоб его уже обновлял минишоп. Или я слегка преувеличиваю возможности аякс обновления msCart?
      Василий Наумкин
      10 марта 2014, 07:58
      0
      В корзине есть изменение количества и удаление товаров.

      Добавления товаров там никогда не было.
        Антон ХайЭксель
        10 марта 2014, 08:15
        1
        0
        хм. заменил на подгрузку через colorbox, который не кеширует ajax запрос и получилось то что хотел.

        Для тех кто столкнется решение просто:

        js
        $(document).ready(function () {
        $(".ajax").colorbox();
        });
        чанк msMiniCart
        <div id="msMiniCart" [[+total_count:isnot=`0`:then=`class="full"`:else=``]]>
        	<div class="empty">
        		<h4> Корзина: [[%ms2_minicart_is_empty]]</h4>
        	</div>
        	<div class="not_empty">
        		<a class='ajax' href="[[~23]]"><h4>Корзина: <strong class="ms2_total_count">[[+total_count]]</strong> шт. - <strong class="ms2_total_cost">[[+total_cost]]</strong> р.</h4></a>
        	</div>
        </div>

        ну и ресурс (у меня 23) — пустой шаблон с содержимым
        [[!msCart?]][[!msOrder?]]
          Василий Наумкин
          10 марта 2014, 08:18
          0
          У нас что-то подобное в магазине, только вручную прописан
          $.post запрос при клике по ссылке, ответ вставляется div и на него вызывается modal().

          В общем, молодец!
            Антон ХайЭксель
            10 марта 2014, 11:05
            0
            Всё же одна проблема осталась — количество товаров не меняется в msCart. Хотя удаляется отлично (js). Что я напутал?
              Антон ХайЭксель
              10 марта 2014, 12:14
              0
              Как заметил работает если набрать число и нажать энтер. Видимо не навешивается какая-то функция на событие… Подскажи, какое событие и функция?
                Василий Наумкин
                10 марта 2014, 12:47
                1
                0
                Скрипт пытается инициализировать корзину сразу после загрузки страницы, когда её еще нет у тебя в DOM:
                ,initialize: function() {
                	miniShop2.Cart.setup();
                	if (!$(miniShop2.Cart.cart).length) return; // Вот здесь скрипт и выходит
                	// А вот это событие на изменение кол-ва товара
                	miniShop2.$doc.on('change', miniShop2.Cart.cart + ' ' + miniShop2.Cart.countInput, function() {
                		$(this).closest(miniShop2.form).submit();
                	});
                 }
                Нужно навешать это событие вручную, или вызвать miniShop2.Cart.initialize() после первой загрузки корзины.
                  Антон ХайЭксель
                  10 марта 2014, 12:49
                  1
                  0
                  Огромное спасибо.
                  Реализовал:
                  $(".ajax").colorbox({
                  onComplete:function(){ miniShop2.Cart.initialize(); },
                  });
                  + отправил спасибо )
                    Григорий Коленько
                    11 марта 2014, 11:12
                    0
                    Я сейчас пишу для себя подобный скрипт со всплывающей корзиной. Столкнулся с той же проблемой, что есть и у тебя. Если добавить товар в корзину, (открыть всплывающую корзину потом закрыть)*(повторить раз пять), а потом изменить во всплывающей корзине кол-во товара, начинается какафония из jGlowl.
                    Я так понимаю создаются дубликаты miniShop2.Cart.initialize();? Вот как исправить – вопрос :) Василий, поможешь?
                    Скрин:
                    yadi.sk/d/a2ig2tsPKJGKk
                      Григорий Коленько
                      11 марта 2014, 12:40
                      0
                      Разобрался. При закрытии окна делаю так:
                      miniShop2.Cart.initialize = null;
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
11