Назад

Автоматическое определение хитов продаж в Битрикс

Главная
Блог
Автоматическое определение хитов продаж в Битрикс

Хиты продаж — это товары, которые пользуются наибольшим спросом у покупателей. Их выделение на сайте повышает доверие клиентов и увеличивает конверсию. Однако ручное обновление списка хитов требует времени и может быть необъективным.

В этой статье мы разберем готовый PHP-скрипт для Битрикс, который:

  • Автоматически собирает данные о продажах.

  • Определяет самые популярные товары.

  • Помечает их как хиты и сбрасывает устаревшие метки.

1. Сбор данных о заказах

Для начала получим список заказов за последние 30 дней:

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

$IBLOCK_ID = 3; // ID инфоблока с товарами

// Получаем заказы за последний месяц
$monthAgo = time() - 3600 * 24 * 30;
$arFilter = [
    ">=DATE_INSERT" => date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")), $monthAgo)
];

$dbOrders = CSaleOrder::GetList(
    ["DATE_INSERT" => "ASC"],
    $arFilter,
    false,
    false,
    ["ID"]
);

$orderIds = [];
while ($order = $dbOrders->Fetch()) {
    $orderIds[] = $order['ID'];
}

Оптимизация:

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

  • Можно добавить фильтр по статусу заказов (например, только оплаченные).

2. Анализ корзин и подсчет продаж

Теперь определим, какие товары встречаются в заказах чаще всего:

$productSales = [];
foreach ($orderIds as $orderId) {
    $dbBasketItems = CSaleBasket::GetList(
        [],
        ["ORDER_ID" => $orderId],
        false,
        false,
        ["PRODUCT_ID", "PRICE", "QUANTITY"]
    );
    
    while ($item = $dbBasketItems->Fetch()) {
        $productId = $item['PRODUCT_ID'];
        $productSales[$productId]['count'] = ($productSales[$productId]['count'] ?? 0) + 1;
        $productSales[$productId]['sum'] = ($productSales[$productId]['sum'] ?? 0) + $item['PRICE'] * $item['QUANTITY'];
    }
}

Улучшение:

  • Учитываем не только количество покупок, но и общую выручку.

  • Можно добавить проверку на дублирование товаров в одном заказе.

3. Определение хитов

Хитом будем считать товар, который:

  • Купили 4+ раза ИЛИ

  • Общая сумма продаж превышает 50 000 руб.

$hitProducts = [];
foreach ($productSales as $productId => $data) {
    if ($data['count'] >= 4 || $data['sum'] > 50000) {
        $hitProducts[] = $productId;
    }
}

// Помечаем товары как хиты
foreach ($hitProducts as $productId) {
    CIBlockElement::SetPropertyValuesEx(
        $productId,
        $IBLOCK_ID,
        ["HIT" => "Y"] // "Y" — значение свойства "Хит"
    );
}

4. Сброс устаревших хитов

Чтобы список оставался актуальным, снимаем метку с товаров, которые больше не соответствуют критериям:

$res = CIBlockElement::GetList(
    ["ID" => "ASC"],
    [
        "IBLOCK_ID" => $IBLOCK_ID,
        "ACTIVE" => "Y",
        "PROPERTY_HIT_VALUE" => "Y" // Только товары, помеченные как хиты
    ],
    false,
    false,
    ["ID"]
);

while ($item = $res->GetNext()) {
    if (!in_array($item['ID'], $hitProducts)) {
        CIBlockElement::SetPropertyValuesEx(
            $item['ID'],
            $IBLOCK_ID,
            ["HIT" => false] // Снимаем метку
        );
    }
}

5. Автоматизация через агентов

Чтобы скрипт запускался автоматически, добавим его в агенты Битрикс:

// Функция-обертка для агента
function updateHitProducts() {
    // Весь код скрипта здесь
    return "updateHitProducts();";
}

// Регистрация агента (выполняется один раз)
CAgent::AddAgent(
    "updateHitProducts();",
    "",
    "N",
    86400 // Запуск раз в сутки
);

Дополнительные улучшения

  1. Фильтр по категориям
    Можно анализировать хиты только в определенных разделах:

    $arFilter["SECTION_ID"] = [10, 15]; // ID нужных разделов

  2. Логирование изменений
    Запись в файл для отслеживания работы скрипта:

    file_put_contents(
        $_SERVER["DOCUMENT_ROOT"] . "/hit_updates.log",
        date("Y-m-d H:i:s") . " Товар ID {$productId} помечен как хит\n",
        FILE_APPEND
    );

  3. Учет сезонности
    Можно менять период анализа (например, зимой — 60 дней, летом — 30).

Заключение

Этот скрипт позволяет автоматизировать процесс выявления хитов продаж, экономя время маркетологов и повышая эффективность интернет-магазина. Доработав его под свои нужды, вы сможете гибко управлять ассортиментом и увеличивать продажи.

Рекомендации:

  • Протестируйте скрипт на тестовой копии сайта.

  • Настройте периодичность запуска в зависимости от нагрузки.

  • Добавьте уведомления об ошибках (например, если свойство "HIT" не найдено).

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи