Битрикс — хиты продаж за последний месяц

Битрикс – хиты продаж за последний месяц

Данный код собирает список наиболее популярных товаров. При необходимости, товары можно отметить как хиты.

Шаг 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.

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *