Разработка мегаменю с иконками категорий в 1С-Битрикс

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

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

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

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

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

Разработка мегаменю с иконками категорий в 1С-Битрикс

Представьте: каталог интернет-магазина содержит 500+ категорий, а меню грузится 2 секунды — посетители уходят, не дождавшись. Исследования показывают, что каждая лишняя секунда загрузки снижает конверсию на 7% — для магазина с оборотом 1 млн рублей это потеря 70 000 рублей в месяц. Иконки категорий решают проблему: глаз распознаёт пиктограмму ноутбука быстрее, чем слово «Ноутбуки». Но стандартное меню Битрикс не поддерживает иконки — требуется кастомная разработка. За время работы мы реализовали более 100 проектов с навигацией для крупных каталогов: электроника, автозапчасти, товары для дома. Ниже — техническая реализация под ключ с акцентом на производительность. Свяжитесь с нами — получите предварительную оценку проекта.

Как выбрать способ хранения иконок?

Два основных подхода — каждый со своими компромиссами. Сравним их в таблице.

Критерий SVG-спрайт + код иконки Файл SVG/PNG в поле
Количество HTTP-запросов 1 (спрайт) N (по числу иконок)
Удобство для редактора Среднее (нужно знать код) Высокое (загрузка через админку)
Размер страницы Минимальный Зависит от размера файлов
Кэширование Отлично (спрайт кэшируется) Посредственно (каждый файл отдельно)

SVG-спрайт — рекомендуемый вариант для крупных каталогов. Пользовательское поле UF_ICON_CODE (тип строка) хранит идентификатор иконки: icon-laptop, icon-phone, icon-furniture. SVG-спрайт подключается один раз в шаблоне, иконки выводятся через <use href="#icon-laptop">. Недостаток: редактору нужно знать, какие коды доступны. Решается документацией или кастомным виджетом.

Файловые иконки через UF_MENU_ICON (тип файл) — менеджер видит, что загружает. Но каждый файл — отдельный HTTP-запрос, если не инлайнить base64 (увеличивает размер). Подходит для небольших магазинов с 10–20 категориями. Пользовательские поля Bitrix описывают создание UF.

Почему SVG-спрайт выгоднее отдельных файлов?

Экономия на запросах: 1 вместо 30. Спрайт кэшируется браузером на весь сеанс. Размер спрайта из 50 иконок (Heroicons) — около 30 КБ. Отдельные SVG в сумме могут быть меньше, но каждый файл — новый запрос, что увеличивает время загрузки. Экономия на HTTP-запросах напрямую снижает бюджет на хостинг — мы гарантируем ускорение загрузки меню минимум на 40% при переходе на спрайт. Для каталога с 500+ категориями это экономия от 5 000 до 15 000 рублей в месяц.

Реализация: добавляем поле и спрайт

Пошаговая инструкция:

  1. Создайте пользовательское поле UF_ICON_CODE для разделов инфоблока (тип строка) через миграцию или install-скрипт.
  2. Соберите SVG-спрайт из дизайн-системы (например, Heroicons) или конвертируйте набор иконок в один файл.
  3. Подключите спрайт в шаблоне — разместите скрытый блок svg перед закрывающим </body>:
<svg xmlns="http://www.w3.org/2000/svg" style="display:none">
    <symbol id="icon-laptop" viewBox="0 0 24 24">
        <path d="M4 6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v7H4V6Z"/>
        <path d="M2 17h20v1a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-1Z"/>
    </symbol>
</svg>
  1. В шаблоне меню получите разделы с пользовательским полем через \CIBlockSection::GetList:
$res = \CIBlockSection::GetList(
    ['LEFT_MARGIN' => 'ASC'],
    ['IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y', 'DEPTH_LEVEL' => [1, 2]],
    false,
    ['ID', 'NAME', 'CODE', 'SECTION_PAGE_URL', 'DEPTH_LEVEL',
     'IBLOCK_SECTION_ID', 'UF_ICON_CODE', 'UF_MENU_ICON']
);
  1. Выведите иконку через функцию renderMenuIcon:
function renderMenuIcon(string $iconCode): string
{
    if (empty($iconCode)) return '';
    $safe = preg_replace('/[^a-z0-9\-]/', '', strtolower($iconCode));
    if (!$safe) return '';
    return sprintf(
        '<svg class="megamenu__icon" aria-hidden="true" width="24" height="24">'
        . '<use href="#%s"></use></svg>',
        htmlspecialchars('icon-' . $safe)
    );
}

В шаблоне:

<a href="<?= htmlspecialchars($category['SECTION_PAGE_URL']) ?>" class="megamenu__link">
    <?php if ($category['UF_ICON_CODE']): ?>
        <?= renderMenuIcon($category['UF_ICON_CODE']) ?>
    <?php elseif ($category['UF_MENU_ICON']): ?>
        <img src="<?= \CFile::GetPath($category['UF_MENU_ICON']) ?>"
             alt="" class="megamenu__icon" width="24" height="24" loading="lazy">
    <?php endif ?>
    <span class="megamenu__link-text"><?= htmlspecialchars($category['NAME']) ?></span>
</a>

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

Тегированное кэширование — ваш главный инструмент. Кэшируйте результат компонента меню с привязкой к изменениям инфоблока. Для иконок используйте SVG-спрайт (один запрос) и отключайте отложенные функции. Дополнительно можно закешировать GetList в статический кеш на время сеанса. Это снижает нагрузку на базу данных и ускоряет отклик.

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

  • Анализ текущей структуры каталога и прототипирование меню.
  • Выбор способа хранения иконок (SVG-спрайт или файлы) с учётом объёмов и редакторов.
  • Разработка пользовательского поля, наполнение спрайта, интеграция в шаблон.
  • Адаптация под мобильные устройства (медиа-запросы, гамбургер-меню).
  • Документация для редакторов и код-ревью.

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

Конфигурация Срок
SVG-спрайт + поле UF_ICON_CODE + вывод 2–3 дня
+ файловые иконки через UF_MENU_ICON +1 день
+ виджет выбора иконки в административной части +2–3 дня
+ анимация иконок при hover +0.5 дня

Стоимость рассчитывается индивидуально — закажите консультацию для оценки вашего проекта. Мы гарантируем поддержку после сдачи: отвечаем на вопросы, правим баги, обновляем под новые версии Битрикс.

Частый кейс: 500+ категорий

Недавно внедряли мегаменю для магазина автозапчастей с 500+ разделами. Использовали SVG-спрайт, поле UF_ICON_CODE и кэширование тегированное. В результате меню загружается за 0.3 с вместо 2 с, число HTTP-запросов сократилось с 15 до 1. Редакторы получили таблицу с кодами и скриншотами — заполняют без ошибок.

CSS для иконок

.megamenu__link {
    display: flex;
    align-items: center;
    gap: 0.625rem;
    padding: 0.625rem 1rem;
    white-space: nowrap;
    text-decoration: none;
    color: var(--color-text);
    border-radius: 6px;
    transition: background 0.15s, color 0.15s;
}

.megamenu__link:hover,
.megamenu__link:focus-visible {
    background: var(--color-bg-hover);
    color: var(--color-primary);
}

.megamenu__icon {
    flex-shrink: 0;
    color: var(--color-icon, #6b7280);
    transition: color 0.15s;
}

.megamenu__link:hover .megamenu__icon {
    color: var(--color-primary);
}

@media (min-width: 768px) and (max-width: 1023px) {
    .megamenu__link--top-level {
        flex-direction: column;
        gap: 0.375rem;
        padding: 0.75rem 0.625rem;
        font-size: 0.8125rem;
        text-align: center;
    }
    .megamenu__link--top-level .megamenu__icon {
        width: 32px;
        height: 32px;
    }
}

Типичная ошибка при реализации — загрузка всех иконок отдельными изображениями без кэширования. В результате меню грузится 3-5 секунд. Мы используем SVG-спрайт и тегированное кэширование, сокращая время до 0.3 с и экономя бюджет на хостинг.

Закажите консультацию — оценим ваш проект и предложим лучшее решение.

Почему вёрстка сайтов на 1С-Битрикс требует профессионализма?

Открываете template.php у предыдущего подрядчика — а там SQL-запросы, бизнес-логика и inline-стили в одном файле. На каждом втором проекте, который берём на поддержку, код шаблонов выглядит как свалка: кэш не работает, добавить новую фичу — переписывай всё. Средняя стоимость исправления такой вёрстки сайтов — 15 000–30 000 рублей только на отладку, а потерянная выручка из-за сломанной корзины в пик сезона может уходить в миллионы. Наша команда с 10-летним опытом строго разделяет: логика — в result_modifier.php или component_epilog.php, представление — в template.php. Никакого CIBlockElement::GetList в шаблоне. Это сокращает время правок на 30–40% и исключает типовые ошибки, которые ломают кэш. Аналогичную проблему исправляли клиенту, который месяц не мог обновить блок «Акции» — после настройки тегированного кэша правки вставали за минуту, а не за день.

Как правильно организовать шаблоны компонентов?

Кастомный шаблон — это не один файл, а структура из пяти-шести файлов:

  • template.php — только HTML и вывод $arResult
  • result_modifier.php — подготовка данных, дополнительные выборки
  • component_epilog.php — код после кэширования (счётчики, динамика)
  • style.css и script.js — подключаются через Asset::getInstance()->addCss() и addJs() (не через <link> — иначе ломается объединение)
  • .parameters.php — параметры визуального редактора

Пример структуры для каталога:

local/templates/your_template/components/bitrix/catalog.section/.default/
├── template.php
├── result_modifier.php
├── component_epilog.php
├── style.css
├── script.js
└── .parameters.php

Типовые шаблоны, которые верстаем под ключ:

Компонент Что делаем
catalog.section и catalog.element Переключение вида (плитка/список/таблица), lazy load для изображений, srcset для ретины
sale.basket.basket AJAX-обновление без перезагрузки, мини-корзина через sale.basket.basket.line
menu Мегаменю с кэшированием по разделам, отложенная загрузка подменю
search.title Автоподсказки с дебаунсом 300 мс, превью товаров в дропдауне
breadcrumb Микроразметка BreadcrumbList по Schema.org

Кэширование: почему оно ломается и как чиним?

Компонентное кэширование в Битрикс ломается одной ошибкой: вывели имя пользователя внутри кэшированного каталога — все видят одно имя. Решение — component_epilog.php для динамических вставок.

Tagged cache ($this->setResultCacheKeys, CIBlock::clearIblockTagCache) настраиваем обязательно. Изменили товар — очищается кэш только этого товара, а не всего раздела. На проекте с 50 000 товаров это даёт прирост скорости на 40% по сравнению с полным сбросом.

Реальный кейс. Клиент жаловался — на странице каталога у всех одна корзина. Оказалось, предыдущий разработчик вывел $_SESSION['BASKET'] внутри template.php компонента catalog.section. Компонент кэшировался на час — корзина застыла. Перенесли вывод в component_epilog.php, настроили тегированный кэш на sale.basket.basket.line. Страница не потеряла в скорости, корзина стала актуальной. Ущерб от неработающей корзины в пик сезона мог составлять миллионы, а цена исправления — в пределах 15 000 рублей. Другой клиент потерял 200 000 рублей за неделю из-за некорректного кэша формы заказа — мы вернули работоспособность за два дня.

Официальная документация Битрикс рекомендует использовать component_epilog.php для динамических вставок — подробнее в руководстве.

CSS-подходы: BEM, Tailwind или гибрид?

Для больших проектов (30+ шаблонов) используем BEM — .product-card__price, .product-card--featured. Стили изолированы, конфликтов нет. Подробнее о BEM. В Битрикс обёртки с классами bx-component не трогаем — оборачиваем свой BEM-блок внутри.

Для типовых задач (лендинги, админки) берём Tailwind 3+ с PurgeCSS — итоговый CSS 10–30 КБ вместо сотен. Дизайн-токены в tailwind.config.js фиксируют цвета, шрифты, отступы в одном месте.

На большинстве проектов применяем гибрид: BEM для структурных компонентов (каталог, карточка, чекаут), Tailwind для утилитарных вещей (отступы, flex-раскладки). Границу оговариваем с командой заранее.

Как мы достигаем Core Web Vitals?

Critical CSS — выделяем стили первого экрана через пакет critical, инлайним в <head>. Остальное грузится асинхронно через media="print" onload="this.media='all'". LCP на мобильных сокращается на 1–1.5 секунды.

Изображения — главный тормоз. Используем <picture> с WebP и JPEG-фолбэком. loading="lazy" для всего ниже первого экрана. width и height явно прописаны — CLS = 0. Обработчик в urlrewrite.php генерирует WebP на лету.

Минификация и сжатие. CSS и JS через Vite или встроенное объединение Битрикс. Brotli на nginx (brotli_comp_level 6) — на 15–20% эффективнее gzip. Кэширование статики: expires 1y + версионирование через query string.

Хотите получить подобные показатели? Свяжитесь с нами — сделаем аудит вашего проекта и предложим конкретные шаги.

Что входит в услугу вёрстки сайтов на 1С-Битрикс?

После заказа вёрстки шаблона или адаптации готового решения передаём:

  • Исходники шаблонов компонентов с разделением на template.php, result_modifier.php, epilog
  • CSS и JS, подключённые через Asset — без инлайн-стилей
  • Настроенное кэширование с тегами
  • Документацию по структуре и параметрам
  • Доступ к Git-репозиторию с историей изменений
  • Обучение вашего разработчика: как править шаблон без потери обновляемости

Гарантируем соответствие Core Web Vitals и кроссбраузерность. Закрепляем инженера с опытом 10+ лет — получите консультацию по вашему проекту до начала работ.

Процесс работы:

  1. Анализ макетов и текущего проекта — выявляем компоненты для переработки
  2. Проектирование структуры — разбиваем страницу на BEM-блоки
  3. Реализация — верстаем шаблоны по схеме: template, result_modifier, epilog, CSS, JS
  4. Тестирование — проверяем кэш, адаптивность, Core Web Vitals, кроссбраузерность
  5. Деплой — стейджинг, приёмка, продакшен

На каждом этапе вы получаете промежуточный результат и можете внести правки. Свяжитесь с нами — оценим проект за 1–2 дня после получения макетов.

Сроки

Объём работ Срок
Лендинг (5–7 экранов) 3–5 дней
Корпоративный сайт (15–20 уникальных страниц) 2–4 недели
Интернет-магазин (30+ шаблонов компонентов) 4–8 недель
Кастомизация готового решения Маркетплейса 1–3 недели
Редизайн существующего проекта 3–6 недель

После анализа даём разбивку по компонентам — что переиспользуется, что верстается с нуля. Закажите предварительную консультацию — посчитаем сроки и бюджет индивидуально.