Розробка модуля фільтрації каталогу 1С-Бітрікс

Розробка модуля фільтрації каталогу 1С-Бітрікс Уявіть: ваш каталог розрісся до 50 000 товарів, а стандартний фільтр Бітрікс почав завантажувати сторінку по 10 секунд. Ми стикалися з таким на кожному другому проєкті. За 8 років розробки модулів для Бітрікс ми виробили рішення, яке дає гарантію про
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Розробка модуля фільтрації каталогу 1С-Бітрікс
Середній
~1-2 тижні

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

Часті запитання

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1415
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    996
  • 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
    735
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    863
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    773
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1134

Розробка модуля фільтрації каталогу 1С-Бітрікс

Уявіть: ваш каталог розрісся до 50 000 товарів, а стандартний фільтр Бітрікс почав завантажувати сторінку по 10 секунд. Ми стикалися з таким на кожному другому проєкті. За 8 років розробки модулів для Бітрікс ми виробили рішення, яке дає гарантію продуктивності навіть на каталогах з 200+ властивостями. Економія на серверних ресурсах за рахунок оптимізованих запитів стає значною перевагою.

Стандартний компонент catalog.section.list з фільтром catalog.section.list.filter працює з коробки, але при великій кількості властивостей (b_iblock_element_prop_s*, b_iblock_element_prop_m*) запити стають повільними через множинні JOIN. Чекбокси показують всі можливі значення без урахування того, скільки товарів за ними стоїть — користувач клікає і отримує порожній результат. Динамічна перебудова фільтра вбиває продуктивність на каталогах від 10 000 позицій.

Як денормалізація індексу прискорює фільтрацію?

Корінь проблеми — архітектура зберігання властивостей інфоблоку. Для кожної властивості потрібен окремий JOIN. Наше рішення — денормалізований індекс фільтра. Модуль створює та підтримує таблицю myvendor_filter_index, де для кожного товару зберігається пласка структура значень всіх фільтрованих властивостей у JSONB:

CREATE TABLE myvendor_filter_index ( element_id INT PRIMARY KEY, section_id INT NOT NULL, price_min DECIMAL(12,2), in_stock BOOLEAN, props JSONB NOT NULL -- {"brand": "Samsung", "color": ["black", "white"]} ); CREATE INDEX idx_filter_props ON myvendor_filter_index USING gin(props); CREATE INDEX idx_filter_section ON myvendor_filter_index(section_id); CREATE INDEX idx_filter_price ON myvendor_filter_index(price_min); 

Індекс оновлюється через подію OnAfterIBlockElementUpdate конкретного товару та через агент для масового перерахунку. За нашими тестами, JSONB-індекс в 15 разів швидший за стандартні JOIN на каталогах від 50 000 товарів.

Деталі оновлення індексу

Агент запускається раз на 5 хвилин за наявності змін. Він збирає ID змінених елементів і оновлює лише їх записи в myvendor_filter_index. При масовому імпорті з 1С індекс перебудовується за розкладом — нічний агент виконує повну переіндексацію.

Чому розумні лічильники (facets) важливі для UX?

Це ключова фіча — показувати поруч із кожним значенням фільтра кількість товарів, які за ним стоять з урахуванням уже вибраних фільтрів. Така поведінка називається фасетний пошук.

-- Підрахунок варіантів для фільтра "Бренд" -- з урахуванням уже вибраного фільтра "Колір: чорний" SELECT props->>'brand' AS brand, COUNT(*) AS cnt FROM myvendor_filter_index WHERE section_id = :section_id AND in_stock = true AND props @> '{"color": "black"}'::jsonb GROUP BY props->>'brand' ORDER BY cnt DESC; 

Цей запит повертає всі бренди з кількістю чорних товарів у наявності. Для кожної властивості виконується окремий такий запит — але це швидко завдяки GIN-індексу. Результати підрахунків кешуються з тегами по розділу та набору активних фільтрів. При зміні будь-якого товару тег скидається. TTL кешу — 30 хвилин.

Як працює AJAX-оновлення?

При зміні фільтра сторінка не перезавантажується: AJAX-запит іде на /api/catalog/filter/, сервер повертає JSON з ID відфільтрованих товарів та оновленими лічильниками. Фронтенд оновлює список і чекбокси. Історія браузера оновлюється через history.pushState. Це забезпечує плавну навігацію без мерехтіння.

Як виглядає URL-схема фільтра?

Фільтр будує «красиві» URL, дружні до SEO:

  • /catalog/smartphones/brand-samsung/color-black/ — посторінковий список з фільтрами
  • /catalog/smartphones/brand-samsung/ — категоріальний фільтр з власним H1 та описом

Ключові сторінки фільтра можуть мати унікальні мета-теги, що задаються через адміністративний інтерфейс модуля. Інші формуються автоматично за шаблоном. Це покращує індексацію та ранжування в пошукових системах.

Ранжування результатів

Окрім фільтрації, модуль керує сортуванням: за ціною, популярністю (кількість замовлень з b_sale_basket), новизною, рейтингом. «Популярність» перераховується агентом раз на добу і зберігається в myvendor_filter_index.popularity_score.

Порівняння: стандартний фільтр vs наш модуль

Параметр Стандартний фільтр Бітрікс Наш модуль
Час запиту (50k товарів, 100 властивостей) 8–12 сек 0.3–0.8 сек
Кількість JOIN у запиті 10–100+ 1 (до денормалізованої таблиці)
Розумні лічильники Ні Так
SEO-URL /catalog/?filter=... /catalog/brand-samsung/
Кешування результатів Обмежене Теговане з TTL 30 хв

Етапи розробки модуля фільтрації

  1. Аудит поточної архітектури каталогу та властивостей інфоблоку.
  2. Проєктування схеми денормалізованого індексу під ваш обсяг даних.
  3. Реалізація фасадів з розумними лічильниками та кешуванням.
  4. Налаштування AJAX-оновлення та красивих URL.
  5. Оптимізація запитів для каталогів до 500 000 товарів.
  6. Документація з підтримки та донавчання адміністраторів.

Терміни розробки

Масштаб Склад Термін
Базовий Денормалізований індекс + чекбокси + діапазон цін 3–4 тижні
Середній + розумні лічильники (фасети) + AJAX + URL-схема 5–7 тижнів
Розширений + SEO-сторінки фільтра + персоналізація сортування 8–11 тижнів

Кількість властивостей інфоблоку та обсяг каталогу — головні фактори вибору архітектури. При 200+ властивостях JSONB-підхід потребує ретельного проєктування схеми індексу.

Чому обирають нас

Ми розробляємо модулі для Бітрікс понад 8 років, реалізували 40+ проєктів з фільтрацією каталогів. Даємо гарантію продуктивності на обсягах від 10 000 товарів. Замовте розробку модуля фільтрації — зв'яжіться з нами для попередньої оцінки вашого проєкту. Отримайте консультацію сьогодні.