Телеграм: @bazarow_ru Почта: mihail@bazarow.ru

Если товар в корзине, поменять значение input на "В корзине"

Просмотров: 11092

Если Вам нужно поменять текст на кнопке, добавляющей товар в корзину, достаточно воспользоваться методом API "CSaleBasket::GetList - который возвращает результат выборки записей из корзины" и немножко js-а

Для данной заметки есть продолжение, под новые шаблоны "bootstrap_v4" Перейти

Если Вам нужно поменять текст на кнопке, добавляющей товар в корзину, достаточно воспользоваться методом API "CSaleBasket::GetList - который возвращает результат выборки записей из корзины" и немножко js-а

Меняем value в input при клике

Итак, у нас есть input c type="submit" - который отправляет товар в корзину


 <input 
    type="submit" 
    name="<? echo $arParams["ACTION_VARIABLE"] . "ADD2BASKET" ?>" 
    value="В корзину" />

Наша задача, при клике на эту кнопку, менять текст в value с "В корзину" на "В корзине". Достаточно воспользоваться javascript функцией onclick.
onclick="if (this.value == 'В корзину') this.value = 'В корзине';"
Просто проверяем: Если в value "В корзину", при событии клика на input поменять на "В корзине"


 <input
     type="submit"
     name="<? echo $arParams["ACTION_VARIABLE"] . "ADD2BASKET" ?>"
     value="В корзину"
     onclick="if (this.value == 'В корзину') this.value = 'В корзине';"
/>

Применяем метод CSaleBasket::GetList

А теперь, если мы перезагрузим страницу с товаром- надпись снова сменится на "В корзину", хотя на самом деле, товар все таки в корзине.

Добавляем следующий код, он, методом CSaleBasket::GetList - проверяет есть ли данный товар (опредеяем по ID товара) в корзине. И если товар есть и он не в отложенных, а именно в готовых к оформлениею, в переменную $itInBasket - передается ID товара.

$dbBasketItems = CSaleBasket::GetList(
    array(
        "NAME" => "ASC",
        "ID" => "ASC"
    ),
    array(
        "FUSER_ID" => CSaleBasket::GetBasketUserID(),
        "LID" => SITE_ID,
        "PRODUCT_ID" => $arResult['ID'], //ID текущего товара
        "ORDER_ID" => "NULL",
        "DELAY" => "N" //Исключая отложенные
    ),
    false,
    false,
    array("PRODUCT_ID")
);
while ($arItemsBasket = $dbBasketItems->Fetch()) {
    $itInBasket = $arItemsBasket['PRODUCT_ID'];
}

А на input навешиваем условие, провяющее переменную $itInBasket на не пустоту и выводящее соответствующую текстовку. Подсказки в коде:

<input 
    type="submit" 
    name="<? echo $arParams["ACTION_VARIABLE"] . "ADD2BASKET" ?>" 
    value="В корзину"
<? if (isset($itInBasket)) { //Если этот товар есть в корзине ?>
    value="В корзине"
<?} else { //Если товара нет (переменная пустая) ?>
    value="В корзину"
<?}?>
onclick="if (this.value == 'В корзину') this.value = 'В корзине';"/>
Рустам Кулиев 24.05.2019
В если добавление товара происходит не по input а по ссылке href как быть ?  
Михаил Базаров 24.05.2019
В целом тоже самое.

Предположим есть ссылка:
Код
<a href="<?echo $arResult["ADD_URL"];?>" class="to_basket">В корзину</a>


Добавляем скрипт, который изменит содержимое ссылки по клику
Код
<script>
$(document).ready(function () {
    $('.to_basket').click(function () {
        $(this).addClass('in_basket'); //Добавляем class in_basket если хотим стилизовать
        $(this).text("В корзине");
    });
});
</script> 

Ну и проверка на наличие в корзине. Тут все также, через CSaleBasket::GetList.
Целиком примерно так
Код
<?
$dbBasketItems = CSaleBasket::GetList(
    array(
        "NAME" => "ASC",
        "ID" => "ASC"
    ),
    array(
        "FUSER_ID" => CSaleBasket::GetBasketUserID(),
        "LID" => SITE_ID,
        "PRODUCT_ID" => $arResult['ID'], //ID текущего товара
        "ORDER_ID" => "NULL",
        "DELAY" => "N" //Исключая отложенные
    ),
    false,
    false,
    array("PRODUCT_ID")
);
while ($arItemsBasket = $dbBasketItems->Fetch()) {
    $itInBasket = $arItemsBasket['PRODUCT_ID'];
}
?> 

<? if (isset($itInBasket)) { ?>
    <a href="<?echo $arResult["ADD_URL"];?>" class="to_basket in_basket">В корзине</a>
<?} else {?>
    <a href="<?echo $arResult["ADD_URL"];?>" class="to_basket">В корзину</a>
<?}?> 

<script>
$(document).ready(function () {
    $('.to_basket').click(function () {
        $(this).addClass('in_basket'); //Добавляем class in_basket если хотим стилизовать
        $(this).text("В корзине");
    });
});
</script> 
Рустам Кулиев 24.05.2019
Михаил спасибо за ответ, у меня кнопка выводиться так:
Рустам Кулиев 24.05.2019
немного не так ка ку меня добавляет
и минус  в том что он не запоминает выбор, т.е. если перезагрузить страницу то сброситься весь js

подскажите Михаил

вот так у меня кнопка идет:
Рустам Кулиев 24.05.2019
Alex Kan 22.04.2020
А этот способ работает и на catalog.element  и на catalog.section?
Михаил Базаров 22.04.2020
Цитата
Alex Kan пишет:
$arResult['ID']
Да, только передайте правильно ID товара
$arResult['ID'] - в карточке
$arElement['ID'] - списке

Что бы не передавалось следующим элементам, обнуляйте переменную
unset( $itInBasket);
в конце вывода.
Виталий Панфилов 16.04.2021
Михаил Базаров, Битрикс случайно не будет кешировать $itInBasket?

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Умный фильтр во всплывающей панели на мобильных. Просмотров: 2358 Шаблон умного фильтра в Битриксе достаточно сложный, с точки зрения верстки и не очень кра... Композитный сайт на 1С-Битрикс Просмотров: 3600 Для новых клиентов: Все новые проекты будут включать в себя применение технологии "Компози... Массово: применить наценку ко всем товарам каталога с пересчетом от б... Просмотров: 6372 Рассмотрим как, в магазине работающем на 1С-битрикс, массово применить наценку на все това... Ссылки для добавления и удаления товара из сравнения в Битрикс Просмотров: 8715 Просто оставляю это здесь, вставка ссылок на добавление и удаление товара из сравнения, ес... Показ страницы сайта в боковом слайдере, на примере всплывающей формы... Просмотров: 3204 Если вы хотите сделать подгрузку любой страницы сайта в боковой слайдер, для этого в битри... Простые калькуляторы в карточке товара каталога на Битрикс Просмотров: 16176 На одном из создаваемых сайтов было необходимо сделать небольшой калькулятор и предварител... Простой WEB сервер на ubuntu, для Битрикс Просмотров: 35932 Расскажу как по быстрому сконфигурировать WEB сервер для работы с Битрикс. Безо всяких ngi... Наличие на складах в умном фильтре 1С-Битрикс, с автоматическим обнов... Просмотров: 1116 Задача: добавить возможность фильтрации товаров по складам в умном фильтре. Данные должны ... Запретить указание количества товаров, добавляемого в корзину, в опре... Просмотров: 83 Задача состоит в том, чтобы запретить указание количества товара, добавляемого в корзину, ... Малая корзина Битрикс, упрощенный шаблон Просмотров: 13606 Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке ... Список новостей с автопрокруткой через overflow:scroll Просмотров: 6137 Простенький javascript позволит сделать автопрокрутку в шаблоне списка новостей. Достаточн... Хостинг панель BrainyCp: оптимизация под 1С-битрикс Просмотров: 8131 В этой видео-заметке расскажу как установить и оптимизировать панель управления сервером B... Глобальные фильтры на всякие случаи жизни Просмотров: 47105 Глобальный фильтр, нужен чаще всего, для вывода определенных элементов, из общего массива... Запретить изменения описаний товаров при выгрузке из 1С УТ на сайт Просмотров: 18107 При разработке сайтов на Битрикс, с интеграцией с 1С Управление Тороговлей, нужно запретит... Открытие мобильного приложения Apache Cordova по ссылке Просмотров: 1186 Достаточно часто нужно реализовывать открытие мобильного приложения по ссылке. Например: п... Как вывести свойства инфоблока по отдельности и немного плюшек не в т... Просмотров: 108813 Если у инфоблока несколько свойств- то при выводе их всех, скажем в детальном описании нов... Как вывести картинки к разделам на базе _ext меню Просмотров: 7642 Просто для эстетической красоты, нужно вывести в меню разделов сайта картинки или иконки. ... Вывести разделы инфоблока в которых находится элемент Битрикс Просмотров: 17017 Если нужно в карточке товара или новости, вывести структуру разделов в котором находится э... Добавление и удаление из сравнения на AJAX: Битрикс Просмотров: 18758 Рецепт лежал у меня в закромах, почти о нем и забыл, но тут подвернулся под руку- решил оп... Проверка на наличие элементов, текущего пользователя, в заданном инфо... Просмотров: 6171 Если стоит задача, определить наличие элементов созданных пользователем на сайте. Можно во...