Данный код собирает список наиболее популярных товаров. При необходимости, товары можно отметить как хиты.
Шаг 1. Как собрать самые продаваемые товары в Битриксе
Для этого пишем скрипт:
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); CModule::IncludeModule("iblock"); $IBLOCK_ID = 3;
Подключаем пролог Битрикса, модуль инфоблоков и записываем в переменную ID инфоблока. Далее собираем список заказов за последний месяц, он нам дальше понадобиться:
$month = time() - 3600*24*30; // 30 day $arFilter = Array( ">=DATE_INSERT" => date( $DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")), $month ) ); $db_sales = CSaleOrder::GetList( array("DATE_INSERT" => "ASC"), $arFilter, false, false, array("ID", "DATE_INSERT_FORMAT") ); $arOrders = array(); while ($ar_sales = $db_sales->Fetch()) { $arOrders[] = $ar_sales['ID']; }
Далее по каждому из заказов смотрим корзину
$arOrderProduct = array(); foreach ($arOrders as $key => $order_id) { $dbBasketItems = CSaleBasket::GetList(array(), array("ORDER_ID" => $order_id), false, false, array()); $product = array(); while ($arItems = $dbBasketItems->Fetch()) { $arOrderProduct[$arItems['PRODUCT_ID']][] = 'Y'; } unset($dbBasketItems); }
Как видите, в качестве счетчика я просто записываю в массив $arItems[‘PRODUCT_ID’] и внутри его пишу флаг Y.
Шаг 2. Как определить самые продаваемые товары в Битриксе
В моем случае условия были такие, что Хитом будем считать любой товар который купили более 3 раз. Пишем это в коде:
$arHits = array(); foreach ($arOrderProduct as $productID => $arProduct) { if (count($arProduct) > 3) { $arHits[] = $productID; } }
Теперь массив $arHits содержит самые продаваемые товары. Отметим их нужным флагом:
foreach ($arHits as $key => $productID) { // update product CIBlockElement::SetPropertyValuesEx($productID, $IBLOCK_ID, array("HIT" => $arCurProp)); echo "Товар с ID ".$productID." УСПЕШНО ОБНОВЛЕН и является Хитом
"; }
$arCurProp – ID значения типа список.
Для большей точности хиты нужно будет сбрасывать.
Как в битриксе массово снять флаг Хит продаж
Для этого пройдемся через уже знакомый нам CIBlockElement::GetList, в фильтре добавим “!PROPERTY_HIT” => false – что значит, выбрать все товары, у которых заполнен флаг HIT
$res = CIBlockElement::GetList ( Array("ID" => "ASC"), Array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y", "!PROPERTY_HIT" => false), false, false, Array('ID', 'NAME') ); while ($arItem = $res->GetNext()) { CIBlockElement::SetPropertyValuesEx($arItem['ID'], $IBLOCK_ID, array("HIT" => false)); }
Вот и всё 🙂 . Сегодня мы научились определять список заказов за последний месяц, получили все товары из корзин пользователей, хиты записали если количество продаж превысило 3, записали внутри товара свойство Хит, а также очистили старый список хитов.
Данный скрипт можно модифицировать под себя добавляя условия, меняя фильтрацию – всё это позволяет Битрикс API.