Меню

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

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

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

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

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

Код
this.initPopupWindow();

в секции
Код
basketResult: function(arResult)
Если вы хотите проверить, есть ли торговые предложения товара в корзине, используя метод 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.
Эта информация будет кэшироваться в шаблоне  
Здравствуйте. А как для списка элементов раздела это сделать?
Возможно есть где-то но не нашел в блоге.
В целом, точно также, просто вместо $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: заметки разработчика

Локальный Copilot в PhpStorm / VSCode, с помощью Continue. Свой, бесплатный Cursor

Это краткий план-черновик для видео (само видео ниже). В нем рассказывается о том, как запустить локальную ИИ мо...

Как добавить режим редактирования элементов в собственном компоненте Битрикс

Задача: добавить режим редактирования и удаления элементов в собственном компоненте.

Ссылка на товары бренда в каталоге с автоматическим применением умного фильтра

Задача: вывести товары на странице бренда, выведенного компонентом "Новости", с ссылками на разделы в каталоге...

Звездочки в рейтинге Битрикс статей и товаров каталога

Задача: изменить вывод рейтинга элемента на звездочки, с помощью шаблона iblock.vote в товарах и новостях.

Как выводить пользовательские поля и названия разделов инфоблока в Битриксе

Если вам необходимо вывести дополнительное пользовательское поле типа "Привязка к разделам инфоблока", эта записка может...

Вывести все товары, с постраничной навигацией, из всех разделов инфоблока

По сути, эта заметка, небольшой лайфхак. Достаточно часто нужно, в корне каталога, в ТОП-е товаров вывести все товары вс...

Удаление недоступных для заказа товаров из корзины

Задача: пользователи магазина могу наполнять корзины, но не доходить до оформления заказа. Такие корзины считаются броше...

Получение SEO данных элементов и разделов инфоблока, через API 1С-Битрикс

Для того чтобы извлечь данные из вкладки SEO административной панели Битрикс, необходимо использовать специализированные...

Заполнить свойство инфоблока ценой из торгового каталога

Если вам по какой-то причине нужно скопировать цену товара в свойство этого же инфоблока. Например, для вывода старой це...