Проверка на наличие текущего товара в корзине Битрикс. Для данной заметки есть продолжение
Если предложение SKU в корзине, поменять кнопку добавления на "В корзине"
Если Вам нужно поменять текст на кнопке, добавляющей товар в корзину, достаточно воспользоваться методом API "CSaleBasket::GetList - который возвращает результат выборки записей из корзины" и немножко js-а
Итак, у нас есть 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 - проверяет есть ли данный товар (опредеяем по 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 = 'В корзине';"/>
![]()
Рустам Кулиев
|
В если добавление товара происходит не по input а по ссылке href как быть ?
|
![]()
Михаил Базаров
|
||||||
В целом тоже самое.
Предположим есть ссылка:
Добавляем скрипт, который изменит содержимое ссылки по клику
Ну и проверка на наличие в корзине. Тут все также, через CSaleBasket::GetList. Целиком примерно так
|
||||||
![]()
Рустам Кулиев
|
Михаил спасибо за ответ, у меня кнопка выводиться так:
|
![]()
Рустам Кулиев
|
немного не так ка ку меня добавляет
и минус в том что он не запоминает выбор, т.е. если перезагрузить страницу то сброситься весь js подскажите Михаил вот так у меня кнопка идет: |
![]()
Рустам Кулиев
|
![]()
Alex Kan
|
А этот способ работает и на catalog.element и на catalog.section?
|
![]()
Михаил Базаров
|
||
$arResult['ID'] - в карточке $arElement['ID'] - списке Что бы не передавалось следующим элементам, обнуляйте переменную unset( $itInBasket); в конце вывода. |
||
На нем, уже много видеоуроков по 1С-Битрикс. Как одиночные видео так и серии видеоуроков Перейти на канал
Совсем скоро выйдет видеокурс по разработке доски объявлений с мобильным приложением. Подписывайтесь и будьте в курсе: