[msMCD] Динамическое обновление мини-корзины miniShop2
Приветствую всех!
Компонент msMCD (mini cart dynamic) для miniShop2 — это рефакторинг старого компонента msMiniCartDynamic с рядом улучшений и предназначен для обновления мини корзины на лету — динамически. msMiniCartDynamic поддерживаться больше не будет.
Теперь не нужно самостоятельно добавлять скрипты на страницу, msMCD делает это сам. Все чанки переписаны на Fenom и Bootstrap4.
Доступен в modstore.pro
Компонент msMCD (mini cart dynamic) для miniShop2 — это рефакторинг старого компонента msMiniCartDynamic с рядом улучшений и предназначен для обновления мини корзины на лету — динамически. msMiniCartDynamic поддерживаться больше не будет.
Теперь не нужно самостоятельно добавлять скрипты на страницу, msMCD делает это сам. Все чанки переписаны на Fenom и Bootstrap4.
Возможности msMCD
- Динамическое обновление мини-корзины
- Добавление товара в корзину как кнопкой, так и ручным вводом, а также кнопками -/+. Опционально
- Анимация добавления товара (полёт картинки). Опционально
- Возможность выбора полей для передачи в мини-корзину. Опционально
- Удаление выбранного товара
Доступен в modstore.pro
Поблагодарить автора
Отправить деньги
Комментарии: 45
К сожалению ESET INTERNET SECURITY 11.1.54.0 не пускает на демо сайт ( extras.marabar.ru/ ), пишет:
Веб-сайт заблокирован
Эта веб-страница находится в списке веб-сайтов с потенциально опасным содержимым.
Доступ к нему заблокирован.
Написали бы заявку им, чтобы ваш сайт убрали из черного списка…
Написал.
А вообще, не понятна причина блокировки, и блокирует только ESET.
Вы можете в настройках указать исключение для демо-сайта, чтобы зайти. Если надо, конечно.
А вообще, не понятна причина блокировки, и блокирует только ESET.
Вы можете в настройках указать исключение для демо-сайта, чтобы зайти. Если надо, конечно.
Если товар удалить из корзины, то добавить его больше невозможно, в режиме ввода количества
Спасибо! Исправлено.
Доброго времени суток. Подскажите пожалуйста не могу разобраться почему не исчезает товар с корзины при удалении. Если добавлено несколько товаров. Количество меняется и сумма меняется и сообщение появляется что товар удален, но сам товар с корзины не уходит — остается. Корзина выводится в модальном окне fancybox
И еще подскажите пожалуйста как добавит msMCDCount — в корзину (Вызываю этот снипет в msMCDMiniCartRowTpl но форма не работает ). Или подскажите где есть подробная дкументация.
И еще вот тут — В системных настройка msmcd_animate_mini_cart — значение «Да», но картинка не летит
И еще вот тут — В системных настройка msmcd_animate_mini_cart — значение «Да», но картинка не летит
В тех поддержке ответил. Обновил документацию, добавлен чанк msMCDProductsRowInputTpl с вызовом сниппета msMCDCount
Возможно ли передать в миникорзину опции (size, color) товара? Можно ли добавить инпут в миникорзине для изменения count товара товара?
Возможно ли передать в миникорзину опции (size, color) товара?Да.
Можно ли добавить инпут в миникорзине для изменения count товара товара?Инпут обязательно в тег form и атрибуты по примеру в чанке msMCDProductsRowInputTpl.
Супер. Вывел размеры без проблем. Спасибо, очень выручили!
Приветствую! А не подскажите как вы вывели размер в миникорзине? Спасибо!
Не выводятся картинки в Миникорзине так как расширение разное в img хранится jpeg а в реальности в папке small лежит картинка с расширением .jpg
В чем может быть проблема — с настройками напутал что-то я, или в компоненте что-то не так?
В чем может быть проблема — с настройками напутал что-то я, или в компоненте что-то не так?
Это баг минишопа. Он генерирует и складывает в папку всё в формате .jpg, а в таблицу пишет .jpg только для small.
У кастомных размеров оставляет оригинальное расширение. Даже .png записывает как .png
У кастомных размеров оставляет оригинальное расширение. Даже .png записывает как .png
Нет, пардон — я ошибся. Не туда посмотрел. Исправлю.
Здравствуйте!
Столкнулся с проблемой, у меня в JS есть код:
miniShop2.Callbacks.Cart.add.response.success = function(ol) {
Который, в случае успешного добавления в корзину вызывает Ajax запрос и в нем запускается сниппет — $output = $modx->runSnippet('msProducts',$params);
И выводит товар, который был добавлен в корзину.
Но в таком случае он конфликтует с msMCD, товары в мини корзине обновляются только после перезагрузки страницы, в чем может проблема?
Столкнулся с проблемой, у меня в JS есть код:
miniShop2.Callbacks.Cart.add.response.success = function(ol) {
Который, в случае успешного добавления в корзину вызывает Ajax запрос и в нем запускается сниппет — $output = $modx->runSnippet('msProducts',$params);
И выводит товар, который был добавлен в корзину.
Но в таком случае он конфликтует с msMCD, товары в мини корзине обновляются только после перезагрузки страницы, в чем может проблема?
Добавляйте callback в массив, со своим названием, чтобы не было конфликтов.
miniShop2.Callbacks.add('Cart.add.response.success', 'my_name_callback', function(ol) {
// тело функции
});
Спасибо, теперь работает как нужно. А не подскажите, у меня точно такая же проблема и с другими сниппетами, такими как: msfavorites, то есть при клике на кнопку «Добавить в избранное» я вызываю ajax запрос и в запросе запускается сниппет msProducts, из-за чего происходит конфликт и как решать подобные проблемы с другими сниппетами?
Я хочу протестировать на тестовом домене, планируется переход на другой домен сайта.
Нужно ли будет приобретать компонент второй раз для другого домена?
Нужно ли будет приобретать компонент второй раз для другого домена?
Я точно не знаю, но мне кажется — нет. Если это ко мне вопрос.
Лучше в тех. поддержке магазина спросить, или поискать на сайте — наверняка есть информация.
Лучше в тех. поддержке магазина спросить, или поискать на сайте — наверняка есть информация.
Подскажите плиз, почему кнопки + — не активы? их нельзя нажать.
Как вызывать это? Как сделать, чтобы кнопки + — стали активны?
Я могу их через инпут полностью написать, но тогда смысл в этом дополнении?
Я могу их через инпут полностью написать, но тогда смысл в этом дополнении?
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)
at HTMLDivElement.(msmcdcount.js:34)
at HTMLDocument.dispatch (jquery.js:5)
at HTMLDocument.v.handle (jquery.js:5)
у меня тоже самое! только с анимацией
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
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
Приветствую, хороший компонент, но хотел отметить несколько вещей:
1. в папке модели должен быть metadata.mysql.php, хотя бы
с таким содержимым:
2. В основном классе, метод инициализации есть, но не вызывается,
и там же pdo подключается, но не получает конфиг, следует
параметры в него не передашь, можно исправить вот так:
но нинциализация не происходит, это значит как минимум pdo не получит конфиг из пункта 2.
Для этого инициализация может быть такой:
работу других компонентов, висящих на событиях изменения
товаров в корзине. Да и префикс msmcd_ не используется ни где.
5. При удалении товара вместо Cart.remove.response.success
нужно использовать:
Вроде после такого напильника, стало работать как нужно. Желаю творческих успехов!
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);
}
});
Тогда будет правильно удалять товары.Вроде после такого напильника, стало работать как нужно. Желаю творческих успехов!
P.s.: в файле msmcdminicart.js
меняем
меняем
this.productId = 'input[name=msmcd_id]';
на this.productId = 'input[name=id]';
в функции msMCDMiniCart.animationCart ошибка, тормозящая работу скрипта, нужно добавить проверку на существование картинки в форме:
if (!img.length) return;
img.clone()
Здравствуйте! Подскажите, может кто-то сталкивался. Использую плагин для корзины msMCD. Сайт мультиязычный.
При добавлении товара в корзину, например из языкового контекста «de», корзина обновляется, НО, в ней содержимое на русском контексте: текст кнопок, заголовки и т.д. Если обновить страницу, то в корзину подтягивается нужный контекст.
При добавлении товара в корзину, например из языкового контекста «de», корзина обновляется, НО, в ней содержимое на русском контексте: текст кнопок, заголовки и т.д. Если обновить страницу, то в корзину подтягивается нужный контекст.
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 товар при нажатии на кноку «добавить в корзину»?
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 товар при нажатии на кноку «добавить в корзину»?
Тут же написано msMCDMiniCart — переменная не определена. Значит JS не подключился скорее всего.
я проверял через dev tools и вручную подключал, все равно такая проблема
Добрый день.
Заметил, что цена в миникорзине при изменении количества товаров на странице большой корзины меняется не сразу, а с задержкой 2 сек. При этом после других операций, например, удаления позиции из большой корзины, цена меняется мгновенно.
Не подскажете, по какой причине это может происходить?
Заметил, что цена в миникорзине при изменении количества товаров на странице большой корзины меняется не сразу, а с задержкой 2 сек. При этом после других операций, например, удаления позиции из большой корзины, цена меняется мгновенно.
Не подскажете, по какой причине это может происходить?
Добрый день. Делаю сайт с мультиязычностью на 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}',
]}
Возникла проблема с динамическим добавлением в корзину, почему то при клике на плюс добавляет сначало 1 товар, потом сразу 3, затем 7, 18, 26, 58 и т.д. Как это пофиксить?
Да, такой баг в mFilter2 возникает
Не могу найти компонент в репозитории modstore. Его удалили? Как и откуда его поставить?
Но это же старый компонент. А был более новый msMCD
, там даже в описании указано про него. У меня он стоит на нескольких сайтах. Или теперь msMCD убрали и обновили старый?
, там даже в описании указано про него. У меня он стоит на нескольких сайтах. Или теперь msMCD убрали и обновили старый?
msMCD убрали, так как автор дополнения скончался…
И не кому осуществлять поддержку.
И не кому осуществлять поддержку.
А нельзя ли выложить последнюю рабочую версию?
Или как-то решить вопрос о продолжении поддержки компонента?
Реально это большая проблема.
Делаю сайт на Bootstrap 5 — на имеющихся решениях по мотивам статьи dart.agency получаю кучу ошибок. Уже неделю бьюсь над настройкой, нет слов чтобы описать ну почему нельзя сделать компонент чтобы поставил и забыл. Ну обязательно надо танцевать с бубнами.
Ну почему нет нормального рабочего компонента (извините уже на эмоциях...)
Или как-то решить вопрос о продолжении поддержки компонента?
Реально это большая проблема.
Делаю сайт на Bootstrap 5 — на имеющихся решениях по мотивам статьи dart.agency получаю кучу ошибок. Уже неделю бьюсь над настройкой, нет слов чтобы описать ну почему нельзя сделать компонент чтобы поставил и забыл. Ну обязательно надо танцевать с бубнами.
Ну почему нет нормального рабочего компонента (извините уже на эмоциях...)
заодно материал docs.modx.pro/komponentyi/minishop2/drugie-dopolneniya/msmcd имеет смысл либо поправить либо убрать — а лучше заменить на рабочий компонент
А кому собственно ваши эмоции адресованы? Автор компонента скончался, правоприемника у него нет.
демо по нему не работает
У меня он стоит на нескольких сайтахНу так скачай с этих сайтов.
Это то конечно скачаю. Вопрос то про другое был.
Добрый день!
Не знаете ли случайно способ использовать данный компонент?
У меня на одном сайте есть версия msMCD 2.1.3, но на другой сайт ее не установить, т.к. транспортный пакет зашифрован и установить может только купивший аккаунт. Купить, соответственно, уже невозможно… Кроме того, в распакованном виде он тоже отказывается корректно работать. В лог пишется ошибка: Could not load class: msMCD from msmcd.
Или может есть аналогичное решение? Мне по сути он нужен, чтобы в каталоге на товарах было видно какие и сколько уже добавлены в корзину.
Не знаете ли случайно способ использовать данный компонент?
У меня на одном сайте есть версия msMCD 2.1.3, но на другой сайт ее не установить, т.к. транспортный пакет зашифрован и установить может только купивший аккаунт. Купить, соответственно, уже невозможно… Кроме того, в распакованном виде он тоже отказывается корректно работать. В лог пишется ошибка: Could not load class: msMCD from msmcd.
Или может есть аналогичное решение? Мне по сути он нужен, чтобы в каталоге на товарах было видно какие и сколько уже добавлены в корзину.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.