В шаблоне имеется иконка, которая является кнопкой добавления в “Избранное”. Есть ли возможность проверить, что товар находится в списке “Избранное”? Чтобы скажем изменить цвет иконки, чтобы пользователь видел, что данный товар находится у него в желаниях.
Можно такой вариант. Включите модуль “Мои изменения” и создайте файл по такому пути:
ТЕМА/templates/addons/my_changes/hooks/index/scripts.post.tpl
В файл вставьте код:
{if ($runtime.controller == "products" && $runtime.mode == "view")}
<script type="text/javascript">
$(document).bind('ready ajaxComplete', function(){
$('.ty-add-to-wish').click(function(){
$(this).css('background', '#4fbe31');
});
});
</script>
{foreach $smarty.session.wishlist.products as $in_wl}
{if $in_wl['product_id'] == $product.product_id}
<script type="text/javascript">
$(document).bind('ready ajaxComplete', function(){
$('.ty-add-to-wish').css('background', '#4fbe31');
});
</script>
{/if}
{/foreach}
{/if}
Почистите кэш.
Это самый быстрый и бюджетный вариант, помогающий избежать проблем с кэшированием подсвеченной кнопки.
В условии прописан запуск скрипта только на страницах товаров, но можно и на страницу категорий вывести прописав дополнительные условия в скрипт.
Цвет кнопки можете выбрать самостоятельно.
Для UniTheme 2 вместо класса .ty-add-to-wish
надо использовать .ut2-pb__wrapper .ut2-pb__button .ut2-add-to-wish
Спасибо!!!
а если вместо этого
прописать так
.html(‘В избранном’);
то будет выводиться надпись “В избранном”
А “Уже в корзине” можно так сделать? Просто $smarty.session.wishlist на $smarty.session.cart поменять?
{if ($runtime.controller == "products" && $runtime.mode == "view")}
<script type="text/javascript">
$(document).bind('ready ajaxComplete', function(){
$('.ty-btn__add-to-cart').click(function(){
$(this).html('в корзине');
});
});
</script>
{foreach $smarty.session.cart.products as $in_wl}
{if $in_wl['product_id'] == $product.product_id}
<script type="text/javascript">
$(document).bind('ready ajaxComplete', function(){
$('.ty-btn__add-to-cart').html('в корзине');
});
</script>
{/if}
{/foreach}{/if}
{if ($runtime.controller == "products" && $runtime.mode == "view")}
<script type="text/javascript">
$(document).bind('ready ajaxComplete', function(){
$('.ty-add-to-wish').click(function(){
$(this).html('в избранном');
});
});
</script>
{foreach $smarty.session.wishlist.products as $in_wl}
{if $in_wl['product_id'] == $product.product_id}
<script type="text/javascript">
$(document).bind('ready ajaxComplete', function(){
$('.ty-add-to-wish').html('в избранном');
});
</script>
{/if}
{/foreach}{/if}
вроде бы как работает…
Кто бы подсказал как сделать чтобы кнопка в корзине стала некликабельной…
Для проверки товара в корзине можно попробовать такой код:
{foreach $smarty.session.cart.products as $in_cart}
{foreach $products as $p_ids}
{if $in_cart['product_id'] == $p_ids['product_id']}
<script>
...
</script>
{/if}
{/foreach}
{/foreach}
Сложнее всего прикрутить это все на страницу категорий из-за ajax-загрузок (фильтры, сортировка, комбинации), из-за которых проверку smarty-условий надо заново запускать, иначе скрипт перестает подсвечивать кнопку без полной перезагрузки страницы. Тут только редактировать другие шаблоны, чтоб блок с кодом обновлялся после ajax-запросов.
На странице товаров все гораздо проще в этом плане.
Актуальнее и лучше будет посмотреть на этот бесплатный модуль, там реализовано отключение кэша после добавления в корзину товара: https://www.ecom-labs.ru/cs-cart-multi-vendor-moduli/cs-cart-modul-kolichestvo-tovara-v-korzine.html
Я пробовал этот модуль. Как я помню, он не работает с вариациями в Категориях совместно с модулем Переключение Вариаций. Щёлкаю по разным вариациям, а количество не меняется.
Попробывал и на страницу категорий прикрутить,вроде как работает.
в
$runtime.controller == “products”
products заменил на categories.
Это только до обновления страницы. Как только покупатель перейдёт на следующую страницу и вернётся обратно - изменения пропадают. К сожалению.
Если удалить этот товар в миникорзине, то надпись не обновляется. На Быстром просмотре тоже не работает. При переключении между размерами в Вариации как один товар.
@albinoz, можно ли этот код оформить отдельным скриптом и пристёгивать вместе с другими на страницу?
<button disabled>...</button>
Чтоб все работало на страницах категорий, надо вносить изменения в шаблоны common/pagination.tpl
, common/sorting.tpl
, /views/products/components/sorting.tpl
, в которых нет хуков и править только напрямую/оверрайдом.
В эти шаблоны, в атрибуты data-ca-target-id
надо добавить div-контейнер, который надо обновлять после ajax-загрузки (переходы по страницам, сортировка, тип отображения), соответственно сам код со скриптом должен полностью быть в этом div-контейнере (который, в свою очередь, лучше вставить в блок с поддержкой smarty, чтоб для него не было кэширования).
К сожалению, в двух строчках тут не расписать, да и не уверен, что стоит так жестко костылить.
для избранного
{if ($runtime.controller == "products" && $runtime.mode == "view")}
<script type="text/javascript">
$(document).bind('ready ajaxComplete', function(){
$('.ty-add-to-compare').click(function(){
$(this).css('background', '#ff5319');
});
});
</script>
{foreach $smarty.session.comparison_list as $in_com}
{if $in_com['product_id'] == $product.product_id}
<script type="text/javascript">
$(document).bind('ready ajaxComplete', function(){
$('.ty-add-to-compare').css('background', '#ff5319');
});
</script>
{/if}
{/foreach}
{/if}