Налаштування відстеження ціни товару користувачем 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування відстеження ціни товару користувачем 1С-Бітрікс
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування відстеження ціни товара користувачем 1С-Bitrix

Відстеження ціни — це коли користувач натискає «Повідомити про зниження» та йде. Через тиждень ціна впала — він отримує лист. Функціонал несмислено складний за логікою, але вимагає трьох елементів: сховища підписок, UI на сторінці товара та механізму порівняння цін. У стандартному Bitrix цього немає — збирається з кількох модулів.

Таблиця підписок

Створіть таблицю bl_price_tracker через \Bitrix\Main\ORM\Data\DataManager:

class PriceTrackerTable extends \Bitrix\Main\ORM\Data\DataManager
{
    public static function getTableName(): string { return 'bl_price_tracker'; }

    public static function getMap(): array {
        return [
            new \Bitrix\Main\ORM\Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]),
            new \Bitrix\Main\ORM\Fields\IntegerField('USER_ID'),
            new \Bitrix\Main\ORM\Fields\StringField('EMAIL'),
            new \Bitrix\Main\ORM\Fields\IntegerField('PRODUCT_ID'),
            new \Bitrix\Main\ORM\Fields\FloatField('PRICE_AT_SUBSCRIBE'),
            new \Bitrix\Main\ORM\Fields\FloatField('TARGET_PRICE'),  // NULL = будь-яке зниження
            new \Bitrix\Main\ORM\Fields\DatetimeField('CREATED_AT'),
            new \Bitrix\Main\ORM\Fields\DatetimeField('NOTIFIED_AT'),
            new \Bitrix\Main\ORM\Fields\StringField('STATUS'), // active, notified, cancelled
        ];
    }
}

Індекси: унікальний на (USER_ID, PRODUCT_ID) — один користувач не може підписатися на один товар двічі.

UI на сторінці товара

У шаблоні компонента bitrix:catalog.element (файл template.php) додайте кнопку:

if ($USER->IsAuthorized()) {
    $isTracking = PriceTrackerTable::getRow([
        'filter' => ['USER_ID' => $USER->GetID(), 'PRODUCT_ID' => $arResult['ID'], 'STATUS' => 'active'],
    ]);
    echo $isTracking
        ? '<button class="btn-untrack" data-id="'.$arResult['ID'].'">Відстежується ✓</button>'
        : '<button class="btn-track" data-id="'.$arResult['ID'].'">Стежити за ціною</button>';
}

AJAX-обробник додає або видаляє рядок в bl_price_tracker. Записуйте PRICE_AT_SUBSCRIBE — поточну ціну на момент підписки. Без цього неможливо визначити, стала ли нова ціна нижче.

Перевірка снижень

Агент запускається раз на годину. Логіка:

  1. Беремо всі активні підписки з bl_price_tracker зі STATUS = active
  2. Для кожного PRODUCT_ID отримуємо поточну ціну через \Bitrix\Catalog\PriceTable::getRow(['filter' => ['PRODUCT_ID' => $id, 'CATALOG_GROUP_ID' => 1]])
  3. Порівнюємо з PRICE_AT_SUBSCRIBE: якщо нова ціна < старої — відправляємо сповіщення
  4. Оновлюємо STATUS = notified та NOTIFIED_AT = NOW()

При бажанні знову активувати підписку після сповіщення — переводимо в active після N днів: додайте в агент логіку reactivation для записів, де NOTIFIED_AT < NOW() - INTERVAL '30 days'.

Сторінка «Мої відстеження»

У особистому кабінеті користувача додайте розділ зі списком відстежуваних товарів. Компонент читає bl_price_tracker за USER_ID та JOIN'ить дані товара з b_iblock_element. Показуйте: назву товара, ціну при підписці, поточну ціну, дату підписки. Кнопка «Скасувати» змінює STATUS на cancelled.

Що налаштовуємо

  • ORM-клас PriceTrackerTable та міграцію DDL для таблиці bl_price_tracker
  • AJAX-контролер підписки/відписки з перевіркою авторизації
  • Кнопку в шаблоні catalog.element з динамічним станом
  • Агент порівняння цін та відправки сповіщень
  • Сторінку «Мої відстеження» в особистому кабінеті