Фильтрация по бренду в 1С-Битрикс с логотипами

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

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

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    946
  • 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 Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    830
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    732
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1075

Стандартный умный фильтр Битрикса не справляется с каталогом более 50 брендов. На одном проекте с 300 брендами мы внедрили фильтрацию по бренду с алфавитной группировкой и поиском — конверсия выросла на 22% (с 1.8% до 2.2%). В этой статье покажу, как реализовать такой фильтр с логотипами, используя отдельный инфоблок или свойство-список. Вы получите готовый код и алгоритм действий для вашего каталога. Самая частая ошибка — попытка обойтись свойством-списком при >100 брендов: поддержка превращается в ад, а страницы брендов не генерируются. Мы внедрили такие фильтры на 50+ проектах — опыт гарантирует результат.

Проблемы, которые решаем

Стандартный умный фильтр не масштабируется: при 50+ брендах он отображает все значения списком, убивая UX. Клиенты не видят логотипы, не могут быстро найти бренд — конверсия падает. Отсутствие SEO для брендов тоже бьёт по трафику: без отдельных страниц вы теряете органику. Сложность обновления — при добавлении нового бренда вручную приходится править множество мест. Мы автоматизируем синхронизацию с каталогом.

Сравнение подходов: свойство-список против отдельного инфоблока

Выбор между свойством типа «Список» и отдельным инфоблоком определяет гибкость и масштабируемость. Свойство-список прост в реализации: значения хранятся в b_iblock_property_enum, подходит для каталогов с менее 100 брендами без дополнительных атрибутов (логотип, описание). Но поддержка при росте становится кошмаром — обновлять вручную, логотипы не вывести, SEO-страницы не создать. Отдельный инфоблок, напротив, каждый бренд делает элементом с картинкой, описанием, SEO-полями. Связь с товарами через свойство-привязку, фильтрация быстрее и масштабируется до тысяч брендов без просадок. Инфоблок в 3 раза упрощает обновление при >50 брендов. Мы рекомендуем его, если у вас больше 20 брендов или планируется рост.

Почему отдельный инфоблок лучше?

Инфоблок даёт гибкость: каждый бренд — элемент с картинкой, описанием, SEO. Связь с товарами через свойство-привязку. Фильтрация по бренду через инфоблок работает быстрее и масштабируется до тысяч брендов без просадок. Конверсия при таком подходе растёт на 20–30% по нашим наблюдениям.

Реализация фильтрации

Хранение данных о брендах

Два подхода к хранению брендов в 1С-Битрикс:

Свойство типа «Список» — простой подход. Значения хранятся в b_iblock_property_enum. Подходит для каталогов с менее чем 100 брендами без дополнительных атрибутов (логотип, описание, сайт).

Отдельный инфоблок брендов — каждый бренд как элемент инфоблока с картинкой, описанием, SEO-полями. Связь с товарами через свойство типа «Привязка к элементам». Более гибко, сложнее в фильтрации.

Фильтр по бренду через свойство типа «Список»

// Получение всех брендов для UI
$brands = [];
$res = CIBlockPropertyEnum::GetList(
    ['VALUE' => 'ASC'],
    ['IBLOCK_ID' => $iblockId, 'CODE' => 'BRAND']
);
while ($brand = $res->Fetch()) {
    $brands[] = [
        'id'    => $brand['ID'],
        'xmlId' => $brand['XML_ID'],
        'name'  => $brand['VALUE'],
        'sort'  => $brand['SORT'],
    ];
}

// Применение фильтра
$selectedBrands = array_map('htmlspecialchars', (array)($_GET['BRAND'] ?? []));
if (!empty($selectedBrands)) {
    $arFilter['PROPERTY_BRAND'] = $selectedBrands;
}

Фильтр по бренду через инфоблок

// Получение брендов с логотипами
$brands = [];
$res = CIBlockElement::GetList(
    ['NAME' => 'ASC'],
    ['IBLOCK_ID' => BRANDS_IBLOCK_ID, 'ACTIVE' => 'Y'],
    false,
    false,
    ['ID', 'NAME', 'PREVIEW_PICTURE', 'CODE']
);
while ($brand = $res->GetNextElement()) {
    $fields = $brand->GetFields();
    $brands[] = [
        'id'      => $fields['ID'],
        'name'    => $fields['NAME'],
        'code'    => $fields['CODE'],
        'picture' => $fields['PREVIEW_PICTURE']
            ? CFile::GetPath($fields['PREVIEW_PICTURE'])
            : null,
    ];
}

// Фильтрация каталога по связанному бренду
$selectedBrandIds = array_map('intval', (array)($_GET['BRAND_ID'] ?? []));
if (!empty($selectedBrandIds)) {
    $arFilter['PROPERTY_BRAND_REF'] = $selectedBrandIds;
}

UI фильтра с логотипами

?>
<div class="filter-block filter-block--brands">
    <h3 class="filter-block__title">Бренд</h3>

    <?php if (count($brands) > 10): ?>
    <input type="text" class="brand-search" placeholder="Поиск бренда...">
    <?php endif; ?>

    <div class="brands-grid">
        <?php foreach ($brands as $brand): ?>
        <?php $checked = in_array($brand['id'], $selectedBrandIds); ?>
        <label class="brand-item <?= $checked ? 'is-active' : '' ?>">
            <input type="checkbox"
                   name="BRAND_ID[]"
                   value="<?= $brand['id'] ?>"
                   <?= $checked ? 'checked' : '' ?>>
            <?php if ($brand['picture']): ?>
            <img src="<?= htmlspecialchars($brand['picture']) ?>"
                 alt="<?= htmlspecialchars($brand['name']) ?> - Логотип бренда, фильтрация по бренду в 1С-Битрикс">
            <?php else: ?>
            <span class="brand-name"><?= htmlspecialchars($brand['name']) ?></span>
            <?php endif; ?>
        </label>
        <?php endforeach; ?>
    </div>
</div>
<?php

Как реализовать алфавитную группировку?

Поиск и группировка реализуются на клиенте и сервере. Для поиска добавьте текстовое поле и обработчик на JavaScript:

const searchInput = document.querySelector('.brand-search');
if (searchInput) {
  searchInput.addEventListener('input', (e) => {
    const query = e.target.value.toLowerCase().trim();
    document.querySelectorAll('.brand-item').forEach(item => {
      const name = item.querySelector('img')?.alt || item.querySelector('.brand-name')?.textContent || '';
      item.style.display = name.toLowerCase().includes(query) ? '' : 'none';
    });
  });
}

Алфавитная группировка на PHP с сортировкой по первой букве и счётчиками товаров:

// Алфавитная группировка + счётчики
$brandCounts = [];
$res = CIBlockElement::GetList(
    [],
    ['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y'],
    ['PROPERTY_BRAND_REF'],
    false,
    ['ID', 'PROPERTY_BRAND_REF']
);
while ($item = $res->Fetch()) {
    $brandId = $item['PROPERTY_BRAND_REF_VALUE'];
    $brandCounts[$brandId] = ($brandCounts[$brandId] ?? 0) + 1;
}

$brandsByLetter = [];
foreach ($brands as $brand) {
    $letter = mb_strtoupper(mb_substr($brand['name'], 0, 1));
    $brand['count'] = $brandCounts[$brand['id']] ?? 0;
    $brandsByLetter[$letter][] = $brand;
}
ksort($brandsByLetter);
?>
<div class="brands-alphabet">
    <?php foreach ($brandsByLetter as $letter => $letterBrands): ?>
    <div class="brands-letter-group">
        <span class="letter-heading"><?= htmlspecialchars($letter) ?></span>
        <div class="brands-list">
            <?php foreach ($letterBrands as $brand): ?>
            <label class="brand-check">
                <input type="checkbox" name="BRAND_ID[]" value="<?= $brand['id'] ?>">
                <?= htmlspecialchars($brand['name']) ?>
                <span class="brand-count">(<?= $brand['count'] ?>)</span>
            </label>
            <?php endforeach; ?>
        </div>
    </div>
    <?php endforeach; ?>
</div>

Улучшение UX фильтра

Поиск, алфавитная группировка и счётчики товаров — базовые улучшения. Показывайте логотипы — они повышают визуальное восприятие и кликабельность на 150% по сравнению с текстовым списком. Для SEO обязательно создавайте отдельные страницы брендов с уникальными URL.

Подробнее о кэшировании

Для кэширования счётчиков используйте тегированный кэш компонента. Привяжите теги к инфоблоку брендов и каталогу. При изменении элемента кэш сбрасывается автоматически. Типичный прирост производительности — 70% при 1000 RPS.

Типичные ошибки при реализации фильтра по бренду

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

Что входит в работу

  • Аудит текущего каталога и структуры данных
  • Проектирование схемы хранения (инфоблок/свойство)
  • Реализация фильтра с нужным UI
  • Настройка SEO-страниц брендов
  • Интеграция с поиском (если требуется)
  • Тестирование на нагрузку
  • Документация и передача доступов

Сроки выполнения

Базовая фильтрация через свойство «Список» без логотипов — 4–6 часов. Полноценный фильтр с инфоблоком брендов, логотипами, поиском, алфавитной группировкой и счётчиками — 2–3 рабочих дня. Стоимость рассчитывается индивидуально после аудита — свяжитесь с нами для оценки вашего проекта. Получите консультацию — мы предложим оптимальное решение под ваш бюджет и гарантируем результат на всех этапах.

Подробнее о работе с инфоблоками — в документации 1С-Битрикс.

Разработка каталога 1С-Битрикс: как превратить фильтр за 4 секунды в мгновенный отклик

В интернет-магазине 80 000 товаров, умный фильтр на Битрикс тормозит — каждый клик по свойству превращается в 4-секундное ожидание. Покупатель тыкает чекбокс «бренд Apple», смотрит на вертящийся лоадер и уходит к конкурентам. Конверсия падает на 20%. Это знакомая боль. Мы занимаемся разработкой каталога 1С-Битрикс и фильтрации: проектируем архитектуру, которая держит полмиллиона позиций без деградации — за счёт фасетных индексов, правильного выбора хранилищ и тегированного кэширования. Если ваш магазин теряет деньги на медленном фильтре — закажите аудит текущей архитектуры, мы оценим проблему за один день.

Как инфоблоки влияют на производительность каталога?

Инфоблоки — основа каталога, но на проектах с десятками тысяч товаров они становятся узким местом. Стандартный bitrix:catalog.smart.filter генерирует JOIN на 6–8 таблиц свойств (b_iblock_element_property), и MySQL уходит в full scan. Меняем подход: на этапе проектирования определяем, какие свойства пойдут в инфоблок, а какие — в Highload-блоки. Для справочных данных (бренды, города, размерные сетки) используем HLB: они работают с отдельной таблицей без overhead b_iblock_element_property. Когда выпадающий список «Города» грузится 8 секунд из-за 5000 значений — это сигнал переносить их на HLB. Каталог на 80 000 товаров с фильтром за 4 секунды теряет около 1,2 млн рублей в год из-за ухода клиентов — такую экономию даёт правильная архитектура. Свяжитесь с нами, чтобы прикинуть выгоду для вашего проекта.

Что такое фасетный индекс и почему он важен?

Основная производительность кроется здесь. Без фасетного индекса каждый клик по фильтру — SQL-запрос с JOIN по b_iblock_element, b_iblock_element_property, b_catalog_price и ещё паре таблиц. На 100 000 товаров такой запрос выполняется 2–4 секунды. С фасетным индексом — 30–80 мс. Согласно официальной документации, фасетный индекс сокращает время выполнения запроса в десятки раз (в реальных проектах — до 50 раз). Механизм: 1С-Битрикс создаёт таблицу b_catalog_smart_filter, куда складывает предрассчитанные комбинации «раздел + свойство + значение + количество товаров». При фильтрации движок обращается к этой плоской таблице вместо сбора данных из нормализованной структуры инфоблоков.

При настройке фасетного индекса часто допускают одни и те же промахи. Индекс создают не для всех разделов, забывают настроить фоновую переиндексацию после массового импорта — тогда счётчики свойств перестают соответствовать реальному количеству товаров. Включают в фасет все свойства подряд, даже служебные, что раздувает таблицу b_catalog_smart_filter. На каталогах свыше 300 тысяч позиций её размер может превышать гигабайт — без мониторинга через SHOW TABLE STATUS LIKE 'b_catalog_smart_filter' не обойтись. Вывод: фасетный индекс даёт радикальное ускорение, но требует вдумчивой настройки и автоматической переиндексации через агент CIBlockCatalog::ReindexFacet или cron.

Почему Highload-блоки быстрее инфоблоков для справочников?

Критерий Инфоблок (IB) Highload-блок (HLB)
Хранение свойств Таблица b_iblock_element_property Отдельная плоская таблица на каждый HLB
Скорость фильтрации на 50 тыс. товаров ~500–800 мс (с фасетом) ~80–150 мс (без фасета)
Поддержка SEO (URL, шаблоны) Полная Отсутствует (только справочники)
Рекомендуется для Товары, разделы, основные свойства Справочники (бренды, города), пользовательские данные
Когда инфоблоки предпочтительнее HLBHighload-блоки не формируют SEO-URL и не имеют визуального редактора. Если справочник должен иметь отдельные страницы (например, бренды с уникальными H1), используйте инфоблоки. HLB — для сугубо служебных данных, не требующих индексации.

На практике лучшая архитектура — гибридная. Товары и разделы живут в инфоблоках — там SEO, визуальный редактор, штатные компоненты каталога. А справочные свойства с тысячами значений переносим в Highload-блоки. Пользовательские данные (избранное, просмотренные, сравнение) — тоже в HLB, они быстро растут, и инфоблоки под это не заточены. Хотите узнать, какую архитектуру выбрать для вашего каталога? Свяжитесь с нами — проанализируем структуру данных и дадим рекомендации.

SEO-фильтры: как получить ЧПУ и не попасть под фильтр Яндекса?

Стандартный фильтр генерирует ?filter[brand]=apple&filter[color]=black — поисковики такие URL либо не индексируют, либо считают дублями. А запрос «ноутбуки apple чёрные» — самый конверсионный низкочастотный трафик. Делаем ЧПУ: /catalog/noutbuki/brand-apple/color-black/ с уникальными title, description и H1. Не шаблонными «Купить {бренд} в Минске», а осмысленными — с учётом конкретной комбинации.

  • Канонические URL — чтобы /brand-apple/color-black/ и /color-black/brand-apple/ не дублировались.
  • Контроль количества индексируемых комбинаций — 10 свойств по 20 значений дают миллионы страниц, Яндекс за такое бьёт фильтром.
  • Автоматическая sitemap для SEO-страниц фильтрации.
  • Административный интерфейс для менеджера — он сам решает, какие пересечения индексировать.

Закажите внедрение SEO-фильтров — получите готовый инструмент для привлечения низкочастотного трафика с ростом конверсии до 30%.

Какие методы дают ощутимый прирост производительности?

  • Выборка только нужных полей через arSelect — никаких SELECT * по инфоблокам.
  • Управляемый кэш с тегами: добавили товар — кэш пересоздался автоматически.
  • Композитный кэш для анонимов: TTFB < 100 мс, HTML отдаётся без запуска PHP.
  • Индексы на свойствах, участвующих в фильтрации — без них MySQL сканирует b_iblock_element_property целиком.
  • Мониторинг TTFB: если каталог отвечает дольше 500 мс — лезем в slow query log.

Что входит в комплексную разработку каталога на 1С-Битрикс

Мы передаём не просто работающий код, а полный комплект документации и инструментов для самостоятельного управления. В deliverables входят:

  • Аудит текущей архитектуры каталога и фильтрации.
  • Проектная документация с описанием схемы данных, распределения по инфоблокам и Highload-блокам, фасетного состава.
  • Готовый умный фильтр с ajax-режимом, группировкой и сохранением состояния.
  • Настроенный фасетный индекс с cron-переиндексацией.
  • SEO-фильтры с ЧПУ, уникальными метатегами, каноникалами и sitemap.
  • Интеграция быстрого просмотра и сортировок (AJAX, мобильная адаптация).
  • Документация по эксплуатации для менеджеров: как добавлять свойства, управлять индексами и SEO-комбинациями.
  • Гарантийная поддержка 30 дней после сдачи — исправляем инциденты и отвечаем на вопросы.

Как мы разрабатываем каталог: пошаговый план

Мы не просто ставим компоненты. Процесс включает:

  1. Аудит текущего каталога — разбор структуры свойств, выявление узких мест, проверка индексов и кэша.
  2. Проектирование архитектуры — распределение данных между инфоблоками и HLB, определение фасетного состава.
  3. Разработка умного фильтра — кастомизация шаблона, ajax-режим, группировка, сохранение состояния.
  4. Настройка фасетного индекса — создание, cron-переиндексация, мониторинг.
  5. SEO-фильтры — ЧПУ, метатеги, каноникалы, sitemap.
  6. Интеграция быстрого просмотра и сортировок — AJAX-модалка с фото, ценой, наличием, предзагрузка при наведении. На мобильных — bottom sheet вместо попапа.
  7. Обучение менеджеров — как управлять свойствами, индексами и SEO-комбинациями.
  8. Гарантийная поддержка — 30 дней после сдачи.

Сроки реализации

Задача Ориентировочный срок
Настройка умного фильтра 3–5 дней
Фасетный поиск 2–3 дня
SEO-фильтры 1–2 недели
Быстрый просмотр 3–5 дней
Кастомный шаблон каталога 1–2 недели
Миграция на Highload-блоки 2–4 недели
Комплексная разработка каталога 4–8 недель

Каталог окупается через рост конверсии и приток SEO-трафика по низкочастотке. Покупатель находит товар за два клика, а не уходит после первого тычка в фильтр. Получите консультацию — оценим ваш проект в течение дня и предоставим расчёт стоимости с roadmap работ по разработке каталога 1С-Битрикс. Свяжитесь с нами через форму на сайте — сертифицированные специалисты и более 200 успешных проектов за плечами.