Отметка элементов каталога 1С-Битрикс, которые уже в корзине

Находясь в каталоге, пользователю нужно видеть, какие из товаров он уже положил в корзину. Для 1С-Битрикс использую такое решение:

В шаблоне файла catalog.section создаем файл result_modifier.php, туда добавляем код для передачи массива с элементами каталога в component_epilog

global $APPLICATION;
$cp = $this->__component;
if (is_object($cp)) {
 $cp->SetResultCacheKeys(array('ITEMS'));
}

далее создаем там же в шаблоне сам файл component_epilog.php с кодом

CModule::IncludeModule('sale');
$arProductsInBasket = array();
$resBasket = CSaleBasket::GetList(
 array(),
 array(
 "FUSER_ID" => CSaleBasket::GetBasketUserID(),
 "LID" => SITE_ID,
 "ORDER_ID" => "NULL"
 )
);
while ($arBasketProd = $resBasket->GetNext()) {
 $arProductsInBasket[] = '#prod_'.$arBasketProd['PRODUCT_ID'];
}

echo '<script>jQuery(document).ready(function(){jQuery("'.implode(', ', $arProductsInBasket).'").attr("href", "#").addClass("in_basket").text("В корзине");});</script>';

там мы выбираем все элементы из корзины текущего пользователя

CSaleBasket::GetList

создаем массив с id для html элемента, ссылки или кнопки «добавить в корзину», в нашем случае это ссылка

$arProductsInBasket[] = '#prod_'.$arBasketProd['PRODUCT_ID'];

выводим javascript, с помощью которого изменяем вид ссылки «добавить в корзину» в каталоге товаров

echo '<script>jQuery(document).ready(function(){jQuery("'.implode(', ', $arProductsInBasket).'").attr("href", "#").addClass("in_basket").text("В корзине");});</script>';

В каталоге товаров ссылка в нашем случае выглядит так

<a href="<? echo $arElement['ADD_URL']; ?>" id="prod_<? echo $arElement['ID']; ?>">В корзину</a>

Похожие статьи

Статья оказалась полезной? Вырази благодарность - поделись в соцсетях

Комментирование отключено