Динамическое обновление основной корзины
Добрый день! У меня к вам такой вопрос профессионалы, столкнулся с тем, что стандартного функционала корзины оказалось недостаточно. Дело в том что на странице корзины, у меня внизу выводятся еще каталог подарков, которые можно добавлять к в корзину к основным покупкам. Когда я щелкаю на добавление какого-то подарка, мини-корзина обновляется, а сама корзина не отображает нового подарка, который также был включен в корзину. Что можете посоветовать для решения этой проблемы? Как сделать динамичным код добавления товаров корзину. Пока у меня в чанке tpl.msCart.outer выглядит так это все:
<div id="msCart">
<table class="table table-striped">
<tr>
<th></th>
<th class="kv">Количество</th>
<th>Стоимость</th>
</tr>
[[+goods]]
</table>
<div class="promo"><span>У меня есть промокод <input type="text" /></span></div>
<p class="full-summ"><strong>Итого:</strong> <span class="ms2_total_count">[[+total_count]]</span> <span>штук</span> стоимостью на <span class="ms2_total_cost">[[+total_cost]]</span> <span>руб.</span></p>
<a class="back" href="[[++site_url]]">НАЗАд В КАТАЛОГ</a>
<a class="next-step" href="/index.php?id=7">Перейти к доставке</a>
<!--<form method="post">
<button class="btn btn-default" type="submit" name="ms2_action" value="cart/clean" title="[[%ms2_cart_clean]]"><i class="glyphicon glyphicon-remove"></i>[[%ms2_cart_clean]]</button>
</form>-->
</div>
В данном случае я так понимаю, надо вызов [[+goods]] как-то обернуть в динамический вызов, как это делается с такими элементами, как [[+total_cost]] или [[+total_count]]. Комментарии: 6
Отлавливаете плагином событие добавления в корзинку, набиваете tpl.msCart.row, возвращаете обработанный результат и добавляете на страницу…
А можно поподробнее, как происходит этот процесс?
Я так понял, дело происходит в самой корзине и на мой взгляд, самый легкий вариант это повесить событие обновления страницы на клик «добавить в корзину», именно к товарам, которые в самой корзине.
Не подскажите как запрограммировать данный вариант решения проблемы? Есть в шапке малая корзина со списком товаров. Задача: обновлять этот список при добавлении товара в корзину, т.к. сейчас он обновляется только при обновлении всей страницы.
Возможно вам поможет мое решение modx.pro/solutions/3942-dynamic-update-of-the-basic-basket/
Искал ответ почти неделю. Прошерстил весь сайт вдоль и поперёк. Пробовал переопределить класс корзины и ещё кучу вариантов с сайта. Очень много вариантов и все решают какую-то задачу вместе с обновлением корзины.
А если у меня задача другая, то…
И тут пришла мысль: а почему бы не перезагрузить корзину средствами JS при наступлении события?
А какое событие у нас наступает? Правильно — изменяется количество ВСЕГДА когда мы что-то делаем в корзине.
В общем берём файл по адресу
assets/components/minishop2/js/web/default.js
или его изменённую версию (если она у вас есть)
и ищем строки:
Меняем на строки:
Полный адрес у меня выглядит так:
мой-сайт.ru/cart
Соответственно, если адрес
мой-сайт.ru/korzina
то новая строка будет выглядеть
А если мы будем находиться на любой другой странице сайта, то условие не будет срабатывать и всё будет работать как и раньше.
Если у адреса после названия раздела есть «хвост» типа
мой-сайт.ru/korzina&что-то#еще-что-то
то смотрите в поисковике функцию Location JS
P.S. Совсем не программист, просто интересуюсь.
Надеюсь, что кому-то сэкономил время.
Посмотреть как работает можно здесь
А если у меня задача другая, то…
И тут пришла мысль: а почему бы не перезагрузить корзину средствами JS при наступлении события?
А какое событие у нас наступает? Правильно — изменяется количество ВСЕГДА когда мы что-то делаем в корзине.
В общем берём файл по адресу
assets/components/minishop2/js/web/default.js
или его изменённую версию (если она у вас есть)
и ищем строки:
if (status['total_count'] < 1) {
location.reload();
}
В этих строках написано: если количество меньше 1 (одного), то перезагрузить страницу.Меняем на строки:
if(window.location.pathname == "/cart"){
location.reload();
}
В этих строках написано: если адрес раздела сайта, в котором мы находимся, совпадает с /cart то перезагрузить страницу.Полный адрес у меня выглядит так:
мой-сайт.ru/cart
Соответственно, если адрес
мой-сайт.ru/korzina
то новая строка будет выглядеть
if(window.location.pathname == "/korzina"){
location.reload();
}
Теперь после обновления количества хоть на мониторе мышкой, хоть на телефоне страница будет перезагружена и мы увидим её обновлённый вариант.А если мы будем находиться на любой другой странице сайта, то условие не будет срабатывать и всё будет работать как и раньше.
Если у адреса после названия раздела есть «хвост» типа
мой-сайт.ru/korzina&что-то#еще-что-то
то смотрите в поисковике функцию Location JS
P.S. Совсем не программист, просто интересуюсь.
Надеюсь, что кому-то сэкономил время.
Посмотреть как работает можно здесь
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.