Меню

Если товар в корзине, поменять кнопку на "В корзине" в новом шаблоне 1С-Битрикс

RSS
Если товар в корзине, поменять кнопку на "В корзине" в новом шаблоне 1С-Битрикс
 
Если товар в корзине, поменять кнопку на "В корзине" в новом шаблоне 1С-Битрикс

Ранее я уже делал заметку на эту тему. Тогда, мы меняли значение input-а при добавлении товара в корзину в старых шаблонах детальной карточки.

В этой заметке рассмотрю этот же функционал для нового шаблона, при этом поправим и некоторый SEO момент данного функционала.
 
Что бы спрятатаь, точнее не показывать, всплывающее окно о добавлении товара в корзину.

В шаблоне catalog.item и catalog.element комментируем строчку с инициализацией этого окна.
Находим ее в файлах script.js

Код
this.initPopupWindow();

в секции
Код
basketResult: function(arResult)
Изменено: Михаил Базаров - 28.05.2022 11:53:47
 
Если вы хотите проверить, есть ли торговые предложения товара в корзине, используя метод CSaleBasket::GetList, то вам нужно сначала получить список торговых предложений текущего товара, а затем проверить их наличие в корзине.
Код
$offerList = CIBlockPriceTools::GetOffersArray(
    array(
        'IBLOCK_ID' => $arParams['IBLOCK_ID']
    ),
    array(
        $arResult['ID']
    ),
    false,
    array(
        'ID'
    ),
    false,
    false,
    false,
    false,
    false,
    false,
    false
);

$offerIds = array_column($offerList, "ID"); // Получаем ID торговых предложений

$dbBasketItems = CSaleBasket::GetList(
    array(
        "NAME" => "ASC",
        "ID" => "ASC"
    ),
    array(
        "FUSER_ID" => CSaleBasket::GetBasketUserID(),
        "LID" => SITE_ID,
        "PRODUCT_ID" => $offerIds, // Проверяем наличие торговых предложений в корзине
        "ORDER_ID" => "NULL",
        "DELAY" => "N"
    ),
    false,
    false,
    array("PRODUCT_ID")
);
$hasOffersInCart = false;
while ($arItemsBasket = $dbBasketItems->Fetch()) {
    if (in_array($arItemsBasket['PRODUCT_ID'], $offerIds)) {
        $hasOffersInCart = true;
        break;
    }
}

В этом примере мы сначала получаем список торговых предложений для текущего товара с помощью CIBlockPriceTools::GetOffersArray. Затем из этого списка извлекаем ID торговых предложений.

Затем мы используем CSaleBasket::GetList для проверки наличия этих торговых предложений в корзине. Если хотя бы одно из торговых предложений присутствует в корзине, то ITEM_HAS_OFFERS_IN_CART будет установлено в true.
Изменено: Михаил Базаров - 28.10.2023 18:35:12
 
Эта информация будет кэшироваться в шаблоне  
 
Здравствуйте. А как для списка элементов раздела это сделать?
Возможно есть где-то но не нашел в блоге.
 
В целом, точно также, просто вместо $arResult['ID'] использовать $arResult['ITEM_ID']['ID']
 
Спасибо!!!
Оказывается я не в тот result_modifier.php код вставлял.
И на списке вот так сделал "PRODUCT_ID" => $arResult['ITEM']['ID'],
 
Подскажите как вывести для торговых предложений на списке товаро?

это в шаблоне прописал верно?
if ($hasOffersInCart) {
$itemInCart = true;
}

возможно в result_modifier.php что то не так передаю.
Распечатывал в шаблоне, id торговых так выводятся $arResult["ITEM"]["OFFERS"][0]
Но не понимаю что поправить чтоб работало.

Подскажите :)
 
Это: так текстом понятно не объяснить. Пока не знаю когда, но постараюсь в течении пары недель сделать видеоинструкцию по этому вопросу
Появится в этой заметке
 
Подскажите как вывести кнопку "Удалить из корзины" после того как мы добавили в нее товар?

Точнее как вывести кнопку в принципе понятно, вопрос где взять айдишник товара в корзине чтобы передать его в метод аякса.
 
Уберите из arSelect получение PRODUCT_ID и распечатайте весь массив, где то там будет ID записи в корзине, точно не помню какой у нее ключ, наверное так и есть "ID"
Код
$dbBasketItems = CSaleBasket::GetList(
    array(
        "NAME" => "ASC",
        "ID" => "ASC"
    ),
    array(
        "FUSER_ID" => CSaleBasket::GetBasketUserID(),
        "LID" => SITE_ID,
        "PRODUCT_ID" => $arResult['ID'],
        "ORDER_ID" => "NULL",
        "DELAY" => "N"
    ),
    false,
    false,
    array("*") // Выбираем все поля
);
while ($arItemsBasket = $dbBasketItems->Fetch()) {
     print_r($arItemsBasket) // распечатываем все поля
}
Читают тему
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 

Блог-note: заметки разработчика

Не дать купить товара больше, чем находится на определенных складах

Задача: в магазине 20 складов, на всех есть остатки но нужно ограничить покупку товара только остатками на двух складах,...

Объединить отдельные поля ФИО в одно свойство при оформлении заказа.

Пользователь, при оформлении заказа, заполняет три отдельных поля с фамилией, именем и отчеством. Нам нужно сохранить эт...

Вывести производителей на сайте с отбором его товаров из каталога

Достаточно частая задачка для каталога или интернет-магазина: вывести список производителей с подробными описаниями, а т...

Уникальная СЕО информация для каждого торгового предложения в каталоге 1С-Битрикс

Задача: реализовать уникальную мета-информацию для каждого SKU в каталоге. У каждого ТП должны быть свои: заголовок h1, ...

GIT-репозиторий на собственном сервере с веб-интерфейсом: Gitea - аналог GitHub

Задача: Развернуть git-репозиторий на собственном сервере с помощью Gitea — для ведения проектов, с веб-интерфейсом и по...

Получение доступа к железу устройства из Битрикс мобильное приложение

Документация к мобильному приложению 1С-Битрикс очень куцая. В основном описывает функционал добавляемый BXMobileApp. ...

Заполнение множественного пользовательского свойства типа "строка" через API

Задача: когда пользователь заходит в мобильное приложение, нужно сохранить FCM токен устройства в пользовательское поле ...

Сортировка элементов по индексу сортировки значений типа список

Внутри любого компонента есть заранее заложенные поля для сортировки элементов. Можно сортировать элементы в разных напр...

CRM Битрикс-24 на веб-окружении под Ubuntu 24.04, c поддержкой PUSH и многосайтовости

Задача: Так как с 30 июня 2024 года операционная система CentOS-7 полностью снята с поддержки и не будет получать обновл...