Розробка фільтру товарів на Vue.js для 1С-Бітрікс

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

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

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

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

  • 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

Розробка фільтра товарів на Vue.js для 1С-Бітрікс

Стандартний AJAX-фільтр Бітрікс (bitrix:catalog.smart.filter) працює на переформуванні URL та повному серверному рендерингу розділу. При 30+ фільтрованих властивостях і великому каталозі кожна зміна — відчутна пауза. Vue-фільтр дає миттєвий UI та розумне debouncing запитів до сервера.

Джерела даних для фасетного фільтра

Бітрікс зберігає фасети в таблицях b_catalog_facet_index* — саме їх використовує розумний фільтр. Для Vue-фільтра використовуємо той самий механізм через D7:

use Bitrix\Catalog\v2\Facade\Catalog;

// Отримання фасетних даних через API смарт-фільтра
$filterFacets = \CCatalogSmartFilter::GetFacets($iblockId, $currentFilter);

Це швидше, ніж самостійний підрахунок через GetList, бо індекс b_catalog_facet_index_* вже розраховано.

Архітектура стану фільтра

Pinia store для фільтра:

export const useFilterStore = defineStore('filter', {
    state: () => ({
        selectedValues: {},   // { propertyCode: [val1, val2] }
        facets: {},           // Доступні значення з кількістю збігів
        priceRange: { min: 0, max: 999999 },
        isLoading: false,
    }),
    actions: {
        async applyFilter() {
            this.isLoading = true;
            // POST /api/catalog/filter з selectedValues
            // Отримуємо: items, facets (оновлені), pagination
        }
    }
});

Типи віджетів фільтра

  • Чекбокси — для властивостей типу «список» (колір, бренд, матеріал)
  • Діапазон цін — слайдер з двома повзунками, input type="range" або кастомний компонент
  • Радіокнопки — для взаємовиключних значень (стан: новий/вживаний)
  • Дерево категорій — рекурсивний компонент для деревоподібних розділів
  • Пошук всередині фільтра — для довгих списків брендів (100+ значень)

URL-синхронізація

Фільтр повинен синхронізувати стан з URL — для можливості поділитися посиланням і для коректної поведінки кнопки «Назад»:

import { useRoute, useRouter } from 'vue-router';

// При зміні фільтра:
router.push({ query: buildQueryFromFilter(filterStore.selectedValues) });

// При ініціалізації:
filterStore.initFromQuery(route.query);

Приклад із практики

Маркетплейс одягу: фільтр за розміром, кольором (50+ кольорів), брендом (200+ брендів), матеріалом, ціною. Стандартний розумний фільтр Бітрікс генерував URL вигляду ?arrFILTER_SIZE[]=S&arrFILTER_SIZE[]=M&... довжиною 500+ символів і перезавантажував сторінку повністю. Vue-фільтр з URL-серіалізацією через скорочені ключі та debounce 400 мс: зміна не викликає перезавантаження, фасети оновлюються асинхронно, чекбокси з 0 збігів не сіріють. Час реакції — 200–600 мс залежно від складності запиту.

Терміни виконання

Варіант Термін
Базовий фільтр (чекбокси, ціна) від 4 до 7 робочих днів
З фасетами, деревом категорій і URL-синхронізацією від 8 до 12 робочих днів
Інтеграція з готовим Vue-каталогом від 3 до 5 робочих днів додатково