Динамическое обновление мини корзины.
Компонент msMiniCartDynamic для магазина miniShop2 даёт возможность изменять количество добавляемых товаров в корзину, как кнопками ±, так и ручным вводом количества в поле input. Также, при необходимости, есть возможность динамического изменения миникорзины. Далее подробно.
ps. Обновлено 07.07.2016г.
Установка msMiniCartDynamic
Сам пакет выложен в Modstore доступен через установщик MODX — Приложения/Установщик.Добавление ± к товарам каталога
Для добавления к товарам каталога кнопок +-, необходимо отредактировать форму в чанке miniShop2 — tpl.msProducts.row, должно получиться примерно так:<form method="post" id="dynamic-[[+id]]" class="ms2_form">
<a href="[[~[[+id]]]]">[[+pagetitle]]</a>
<span class="flags">[[+new]] [[+popular]] [[+favorite]]</span>
<span class="price">[[+price]] [[%ms2_frontend_currency]]</span>
[[+old_price]]
[[!msDynamicCount?
&id=`[[+id]]`
]]
<input type="hidden" name="id" value="[[+id]]">
<input type="hidden" name="options" value="[]">
</form>- Удалить button name=«ms2_action»
- Удалить input name=«count»
- Добавить в форму идентификатор id=«dynamic-[[+id]]»:
<form method="post" id="dynamic-[[+id]]" class="ms2_form"> ... ... ... </form> - Разместить не кэшированный вызов сниппета [[!msDynamicCount]], с обязательным параметром &id=[[+id]]
<script src="/assets/components/msminicartdynamic/js/web/msminicartdynamic.js"></script>Доступны плейсхолдеры:- [[+key_d]] — Уникальный ключ товара в корзине
- [[+count_d]] — Количество этого товара в корзине
- [[+id_d]] — ID товара (ресурса) в корзине
Динамическое изменение мини-корзины
Компонент имеет возможность динамически изменять состав мини-корзины, для этого достаточно в чанк tpl.msMiniCart поместить вызов сниппета<div id="msMiniCart" [[+total_count:isnot=`0`:then=`class="full"`:else=``]]>
<div class="empty">
<h5><i class="glyphicon glyphicon-shopping-cart"></i> [[%ms2_minicart]]</h5>
[[%ms2_minicart_is_empty]]
</div>
[[!msMiniCartDynamic?
&img = `24x92`
]]
<div class="not_empty">
<h5><i class="glyphicon glyphicon-shopping-cart"></i> [[%ms2_minicart]]</h5>
[[%ms2_minicart_goods]]: <strong class="ms2_total_count">[[+total_count]]</strong> [[%ms2_frontend_count_unit]],
[[%ms2_minicart_cost]]: <strong class="ms2_total_cost">[[+total_cost]]</strong> [[%ms2_frontend_currency]]
</div>
</div>Доступны плейсхолдеры:- [[+name_d]] — Название товара (pagetitle)
- [[+key_d]] — Ключ товара
- [[+count_d]] — Количество данного товара в корзине
- [[+price_d]] — Цена товара товара за единицу
- [[+sum_d]] — Сумма товара
- &tpl — Чанк для одного товара. По умолчанию: msMinicartDynamic
- &tplOuter — Чанк обёртка всего блока. По умолчанию: msMinicartDynamicOuter
- &img — Картинка (миниатюра) товара. По умолчанию: Пусто
Заключение
Сам по себе мой компонент в корзину ничего не добавляет, этим всем занимается miniShop2. msMiniCartDynamic просто инициализирует и ловит определённые события изменения корзины, подсчитывает кол-во и сумму определённого товара и выводит всё это дело на экран.ps. Обновлено 07.07.2016г.
Комментарии: 134
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Как сделать количество 1 по умолчанию?
У компонента есть 2 чанка для вывода данных у товара (название не помню, так как пришлось искать другое решение): 1) для товаров которых еще нет в корзине, 2) для товаров которые уже в корзине. В них в input и указывается кол-во товаров, о котором вы и спрашиваете («Как сделать количество 1 по умолчанию?»).
При загрузке страницы, каждому товару подставляется кол-во, находящихся уже в корзине.
Но при этом никто не запрещает тут же изменять это количество. При следующей загрузке, это кол-во и отобразится.
А в остальном — да, не хорошо по умолчанию 1 указывать. Нажимая на "-" получаем ошибку добавления, нажимая на "+" — 2 товара в корзине.
Я как раз искал решение подобной задачи.
Все работает. Но при добавлении товара вылетают 2 сообщения о добавлении joxi.ru/DrlOdW4uJeLJAP вместо одного, хотя товар добавляется один. Был бы рад если это получится решить, могу малость спонсировать.
Но мысль, добавить такую возможность, есть. +добавить возможность удалять отдельно взятый товар из мини-корзины.
Со временем беда.
Добавлю в следующей версии.
Не работают кнопки +-.
Выделяет просто как текст. В чём может быть причина?
Есть где посмотреть?
Моя вина, пропустил в документации — исправлю.
И обнови пакет, сегодня новую версию выложил.
Скрипт подключен?
Скрипт подключен
file.modx.pro/files/b/7/1/b718b5da52461bbcadf7186ed328e3a3.jpg
в файле function.js, строчки 112, 113
Попробуй закомментировать return false;
По поводу твоей ошибки можно почитать здесь.
аналогичная проблема как описал Mихаил выше, при этом в консоль ошибок ни каких не падает.
На сайте подключен Sticky Plugin v1.0.3 for jQuery (jquery.sticky.js), при его отключении всё работает так как надо.
Из предупреждений, есть вот такое — Похоже, что этот сайт использует эффект позиционирования связанный с прокруткой. Это может не очень хорошо работать с асинхронным панорамированием; см. developer.mozilla.org/docs/Mozilla/Performance/ScrollLinkedEffects чтобы получить более подробную информацию и присоединиться к обсуждению связанных с этим инструментов и возможностей!
Ссылка есть на сайт?
Иначе два идентификатора на странице id=«mc-dynamic».
P.S На обоих сайтах один набор скриптов.
На обоих сайтах одинаковый набор скриптов — один шаблон.
И компонент наверное getRelated — а не msRelated. Правда на втором сайте он не стоит.
msRelated — это название массива в сессии и пишет его плагин с ID=7, и почему то он пуст.
Пробуй деактивировать их плагины поочерёдно, чистить кеш и проверять.
Возможно поможет.
Деинсталировал все компоненты, кроме: miniShop2, mSearch2, pdoTools. Отключил все скрипты, оставил только:
Отключил все лишние плагины.
Эфект тот-же!!!
Пакет в modstore.
Пытаюсь вывести название товара в мини-корзине, однако на месте названия пусто, при добавлении нового или удалении уже имеющегося товара из корзины появляется [[+name_d]].
скрипт подключен, версия дополнения 1.0.4.
Цена, количество и сумма товара отображаются нормально.
Подскажите в чем может быть причина?
При добавлении в корзину появляется [[+name_d]], при обновлении страницы исчезает, но вместо нее не появляется название…
и кстати с парсером fenom дружит дополнение?
Тоже появляется [[+name_d]]
В следующей версии сделаю проверку.
(пробовал, не появилось)
Нужно не указывать параметр &img в вызове снипета. По умолчанию сейчас пусто.
Ну и из чанков удалить плейсхолдеры [[+img_d]]
Сейчас обновление залью.
У меня не обновляется корзина, после события положить в корзину, если обновить страницу все работает корректно.
С точки зрения удаление, необходимо добавить key товара в список, и все удаляется, а что бы добавить товар динамически, что нужно сделать?
Заранее спасибо за ответ, я пользуюсь версией 1.0.6
Мне вот не совсем понятно как реализовать кнопки ± в мини-корзине. Если прописать то же самое, что в tpl.msProducts.row, то всё работает, но id-шники задваиваются и второй клик по ± уже не срабатывает.
Как быть? может я пропустил что-то в документации?
Вы задаете вопрос по msDynamicСount, а я по msMiniCartDynamic
У меня не обновляется миникорзина, после того как я положил товар)
А у Вас проблемы с Count в определенных местах магазина.
мне нужно знать, можно ли доделать msMiniCartDynamic или где-то заказывать разработку нового.
Общий сниппет msMiniCart
Обертка
И основной чанк
joxi.ru/D2P6LEMId7B56r
ато пользователи ловят глюки и мучаются в поиске что же не так.
Спасибо!
Fix.
Феном тут не срабатывает
Этот код тут не подходит. Мне нужно вывести только те опции с которыми товар был добавлен в корзину. Как это сделать?
На следующей неделе добавлю такую возможность.
Если все гуд, внесете в компонент?
Добавил ваши строки себе, но пока вообще ничего не выводит. Как-то можно из options вытащить только old_price?
Пробовал заменить на
Но в миникорзине выводится просто плейсхолдер [[+old_price_d]] прямо со скобками
Не совсем понятно что нужно указать в "&img =" что бы появились картинки.
Помогите разобраться.
Минус в том, что нужно обязательно для каждого товара указывать название картинки одинаково.
Теперь в данном сниппете необходимо указывать то, что указано в источнике файлов -> MS2 Images -> thumbnails (по ум. 'small')
[[!msMiniCartDynamic?
&img = `small`
]]
«1» в плейсхолдер вместо «0», в чанке для недобавленых товаров — исполнил, но товар добавляется по-прежнему только через +
Подскажите, плз., в чем тут дело?
Не работает динамическое обновление. Скрипт выдает ошибку.
Беру стандартный минишоповский чанк, удаляю все по инструкции, дописываю скрипт. После нажатия на + (или кнопку добавить ранее) динамически появляется такая конструкция на месте корзины:
Ну или такая. После обновления страницы все на месте уже :)
Обновила страницу и оп:
<img src="
1. в миникорзине будет ли работать изменение количества?
2. почему-то у меня добавляется не основное фото товара, а последнее, как быть?
1. Попробуй добавить в миникорзину содержимое чанка msDynamicCountChange, по идее должно работать — я не проверял.
2. Выше не подходит решение? Я не тестировал ещё с новой версией miniShop2 — ничего не могу сказать. В планах, в апреле, есть желание переписать компонент.
2. перегенерировал превьюшки, все наладилось. У них при импорте у всех rank = 0 почему-то был
Может кто подскажет как забороть сию неприятность?
PS. И насколько я понял, вывод опций (именно тех опций, с которыми товар улетел в корзину, а не всех вообще) товара так и не реализован?
По поводу опций вопрос пока остается открытым.
Подскажите, пожалуйста! Можно ли реализовать изменение цены в зависимости веса данным компонентом?
Подскажите пожалуйста в какую сторону копать…
И миникорзина должна обновляться как положено.
UPD. Читайте внимательно описание компонента, там этот момент указан. Видимо по каким-то причинам автоматическая подгрузка скрипта не была реализована.
Предполагаю что это из-за того что у меня фактически 2 вызова — на десктопную и мобильную версию, в зависимости от версии 1 display:none. Пробовал через jquery добавлять но он добавляется статично и так же обрабатывается после обновления страницы…
Как их тогда развести если 1 вызов мне нужен в header а 2 в footer…
Еще, если мне не изменяет память, дополнение msMinicartDynamic не пересчитывает динамически полную сумму корзины, поэтому я для пересчета итоговой суммы оставил логику стандартной корзины. Вот код как у меня выглядит миникорзина.
Скорее всего вы что-то не правильно сделали. Попробуйте сделать точно по документации. Прямо один в один.
И сталкивались вы стакой проблемой — не всегда обновляется в миникарзине аяксом.
И на странице товара не всегда автоматически обновляется.
Он как то не стабильно работает, то все отлично, то через раз.
Спасибо!
Появился новый вопрос с выводом опций
И работают ли модификаторы в плейсхолдерах? т.к. так ничего не выводит!
они не работают, скажите, что делаю не так?
вот код чанка msMinicartDynamic
Кто-нибудь знает где примерно искать причину или может сталкивался с подобным?
В ресурсе №10 лежит список товаров, который вызывается
toggleCart:
таким образом получается следующее: при клике «положить в корзину» сколько бы то ни было раз товар в нужном количестве попадает в корзину. При открытии мини-корзины AJAX-ом делается запрос на ресурс №10, который сниппетом msCart по шаблону toggleCart формирует из корзины список товаров и их количество. Из toggleCart запускается сниппет msDynamicCount при изменении количества единиц товаров. Учитывая, что запросы выполняются AJAX'ом, возможно, не стоит ждать быстрой скорости реакции. В моем случае это 1-3 секунды при обновлении страницы. И даже в этом случае нет гарантии, что количество единиц товара будет изменено. Плюс, в инпут невозможно ввести свои показания: фокус очень быстро «уходит» с инпута(возможно ввести символы, но такое никуда не годится).