Битрикс — определяем новинки в каталоге

При помощи данного скрипта и API Bitrix можно определить какие из товаров являются новинками.

Как выставить товарам свойство «Новинка» в Битриксе?

Задача: Выставить у товаров флаг «Новинка» автоматически без участия пользователя.
Решение: Разбиваем на несколько шагов.
Шаг 1. Подключаем пролог и модуль инфоблоков:

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("iblock");

Шаг 2. Задаем стартовые параметры:

$iblockID = 33;
$propNewID = 1138;
$arOrder = ['ID' => 'DESC'];
$arFilter = ['IBLOCK_ID' => $iblockID, 'ACTIVE' => 'Y', 'PROPERTY_HIT' => $propNewID];
$arNavStartParams = ['nTopCount' => '10'];
$arSelectFields = ['ID', 'NAME'];
$arGroupBy = false;

Тут нужны некоторые пояснения — 33, это ID нашего инфоблока, 1138 — ID значения свойства тип список, где и определяется что этот товар является новинкой. Сортировка по ID по убыванию — таким образом все товары будут отсортированы по новизне.
‘PROPERTY_HIT’ => $propNewID — выбираем в базе товары отмеченные, как новинки
‘nTopCount’ => ’10’ — отмечать будем только 10 товаров

Шаг 3. Убираем у всех товаров флаг Новинка:

$dbRes = CIBlockElement::GetList($arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectFields);
while ($arRes = $dbRes->Fetch()) {
	CIBlockElement::SetPropertyValuesEx($arRes['ID'], $iblockID, array("HIT" => false));
}

Обратите внимание, что тут тоже сработает $arNavStartParams = [‘nTopCount’ => ’10’]; и флаг снимется только у 10 товаров.
Шаг 4. Задаем свойство Новинка для новых товаров:

$arFilter = ['IBLOCK_ID' => $iblockID, 'ACTIVE' => 'Y'];
$dbRes = CIBlockElement::GetList($arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectFields);
while ($arRes = $dbRes->Fetch()) {
	CIBlockElement::SetPropertyValuesEx($arRes['ID'], $iblockID, array("HIT" => $propNewID));
}

Вот таким вот образом можно выбрать в битриксе новые товары и отметить их специальном значком. Нужно проставить им соответствующее свойство 🙂 .
Код целиком:

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("iblock");

// Параметры
$iblockID = 33;
$propNewID = 1138;
$arOrder = ['ID' => 'DESC'];
$arFilter = ['IBLOCK_ID' => $iblockID, 'ACTIVE' => 'Y', 'PROPERTY_HIT' => $propNewID];
$arNavStartParams = ['nTopCount' => '10'];
$arSelectFields = ['ID', 'NAME'];
$arGroupBy = false;


// Ищем товары которые уже отмечены как новинки
$dbRes = CIBlockElement::GetList($arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectFields);
while ($arRes = $dbRes->Fetch()) {
	CIBlockElement::SetPropertyValuesEx($arRes['ID'], $iblockID, array("HIT" => false));
}


// Собираем актуальные новинки
$arFilter = ['IBLOCK_ID' => $iblockID, 'ACTIVE' => 'Y'];
$dbRes = CIBlockElement::GetList($arOrder, $arFilter, $arGroupBy, $arNavStartParams, $arSelectFields);
while ($arRes = $dbRes->Fetch()) {
	CIBlockElement::SetPropertyValuesEx($arRes['ID'], $iblockID, array("HIT" => $propNewID));
}

Что в скрипте можно улучшить? Можно собирать массив уже отмеченных новинок и если они совпадают с «новым списком», то их не трогаем, и пропускаем в цикле.

автор: Dmitriy

Занимаюсь веб-разработкой с 2011 года. Посмотреть некоторые из моих работ, а также узнать чуть больше обо мне, вы можете на forwww.ru.

- Создание сайтов на 1С-Битрикс любой сложности
- Вёрстка макетов Figma, Photoshop, Zeplin
- Поддержка проектов на Битриксе
- Разработка нового функционала для сайта
- Парсинг данных
- Выгрузка из файлов в формате XML, YML, XLS, XLSX, CSV, JSON
- Интеграция по API со сторонними сервисами
и многое другое

E-mail: dmitriyribka@gmail.com

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *