Если Вам нужно поменять текст на кнопке, добавляющей товар в корзину, достаточно воспользоваться методом 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 = 'В корзине';"/>

Предположим есть ссылка:
Код |
---|
<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> |
и минус в том что он не запоминает выбор, т.е. если перезагрузить страницу то сброситься весь js
подскажите Михаил
вот так у меня кнопка идет:


Цитата |
---|
Alex Kan пишет: $arResult['ID'] |
$arResult['ID'] - в карточке
$arElement['ID'] - списке
Что бы не передавалось следующим элементам, обнуляйте переменную
unset( $itInBasket);
в конце вывода.
