Меню

Если товар в корзине, поменять кнопку на "В корзине" в новом шаблоне 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) // распечатываем все поля
}
Читают тему (гостей: 1)
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить файлы
 
Поблагодарить и поддержать:
Или подписаться на boosty канал: Видео на Bst

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

Добавить СЕО-метатеги в результаты поиска по каталогу

Задача: на странице с результатами поиска по каталогу нужно установить уникальные метатеги: keywords, description, canon...

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

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

Подключение SSL на Битрикс виртуальная машина

С первого января 2017 года, наличие безопасного соединения HTTPS становится практически обязательным. Ваши сайты будут з...

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

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

Фиксированная корзина с обновлением, без перезагрузки страницы.

Иногда нужно сделать так, чтобы корзина в интернет магазине, созданном на Битрикс, была постоянно на виду, при этом обно...

Время на БД и веб сервере отличается на 3600 секунд, тест Битрикс

Достаточно часто, при проверке параметров системы, в Битрикс, можно увидеть одну из ошибок: Время на БД и на сервере- Вр...

Выбор основного раздела для элемента инфоблока в 1С-Битрикс

Проблема: при привязке элемента инфоблока к нескольким разделам возникают дубли его детальной страницы, в зависимости от...

Базовая защита "Битрикс виртуальная машина" от DDoS атак.

Данный способ защиты не панацея, и скорее всего не спасет от профессиональной DDoS атаки, когда ваш сервер на CentOS под...

Старые шаблоны битрикс для простой верстки

Новые версии типового интернет-магазина, который идет в комплекте с Битрикс (от 12 версии и выше), достаточно технологич...