Доработка компонентов Битрикс через result_modifier
Наши инженеры регулярно получают такие задачи: вывести список товаров через catalog.section с дополнительными данными — остатками по складу, рейтингами, кастомными свойствами. Стандартные компоненты Битрикс не дают таких данных «из коробки». Многие разработчики лезут в ядро или копируют компонент целиком и получают проблемы с обновлениями платформы.
Мы используем result_modifier.php — файл, который выполняется после работы компонента, но до рендера шаблона. Он позволяет дополнить $arResult любыми данными без единой правки ядра. Согласно официальной документации 1С-Битрикс, result_modifier предназначен для трансформации данных перед шаблоном. Это даёт полную совместимость с обновлениями платформы и снижает время доработки в 2–3 раза по сравнению с переопределением компонента. Экономия бюджета достигает 30–50%, что на типовой задаче составляет от 40 000 до 80 000 ₽. А все изменения кэшируются вместе с основными данными.
Принцип работы result_modifier
Последовательность выполнения компонента:
-
component.php — логика компонента, заполняет $arResult.
-
result_modifier.php — модификация $arResult в шаблоне.
-
template.php — рендер HTML.
-
component_epilog.php — постобработка после рендера.
Файл result_modifier.php живёт в папке шаблона компонента:
/local/templates/{site_template}/components/bitrix/catalog.element/default/result_modifier.php
Если вы создали шаблон через административный интерфейс (Настройки → Компоненты → Шаблоны компонентов), файл создаётся автоматически.
Доступные переменные внутри
| Переменная |
Описание |
$arResult |
Массив данных компонента (можно изменять) |
$arParams |
Параметры вызова компонента |
$this |
Объект компонента CBitrixComponent |
$USER, $APPLICATION, $DB |
Глобальные объекты Битрикс |
Преимущества перед переопределением компонента
Переопределение компонента через /local/components требует копирования всей логики и её поддержки при обновлениях. result_modifier работает поверх существующего компонента, сохраняя совместимость с обновлениями. Время доработки сокращается в 2–3 раза, а бюджет снижается на 30–50% (от 50 000 до 100 000 ₽ экономии на среднем проекте). При этом вы не теряете в производительности — все изменения кэшируются вместе с основными данными.
Примеры доработок
Добавление рейтинга через result_modifier
В карточке товара (catalog.element) $arResult не содержит рейтинг из таблицы отзывов. Решаем одной функцией:
// result_modifier.php for bitrix:catalog.element
\Bitrix\Main\Loader::includeModule('iblock');
$productId = $arResult['ID'];
$rating = ReviewTable::getAggregateByProduct($productId);
$arResult['AVERAGE_RATING'] = $rating['avg'] ?? 0;
$arResult['REVIEWS_COUNT'] = $rating['count'] ?? 0;
Остатки по складам в списке товаров
// result_modifier.php for bitrix:catalog.section
\Bitrix\Main\Loader::includeModule('catalog');
$productIds = array_column($arResult['ITEMS'], 'ID');
$stocks = \Bitrix\Catalog\StoreProductTable::getList([
'filter' => ['PRODUCT_ID' => $productIds, 'STORE.ACTIVE' => 'Y', 'STORE.XML_ID' => 'MAIN_WAREHOUSE'],
'select' => ['PRODUCT_ID', 'AMOUNT'],
])->fetchAll();
$stockMap = array_column($stocks, 'AMOUNT', 'PRODUCT_ID');
foreach ($arResult['ITEMS'] as &$item) {
$item['MAIN_STOCK'] = $stockMap[$item['ID']] ?? 0;
$item['IN_STOCK'] = $item['MAIN_STOCK'] > 0;
}
unset($item);
Изменение цен для групп пользователей
Для показа оптовой цены авторизованным пользователям в result_modifier проверяем группу и подменяем цену:
if ($USER->IsAuthorized() && in_array(5, $USER->GetUserGroupArray())) {
$arResult['PRICE'] = $arResult['PRICE'] * 0.9; // скидка 10%
}
Кэширование и производительность
Если внутри result_modifier выполняется тяжёлый запрос (например, к внешнему API или большая выборка), оберните его в кэш. Иначе при каждом хите будет выполняться лишняя работа.
$cacheId = 'product_extra_' . $arResult['ID'];
$cacheDir = '/product_extra/';
$ttl = 3600;
$cache = \Bitrix\Main\Data\Cache::createInstance();
if ($cache->initCache($ttl, $cacheId, $cacheDir)) {
$extraData = $cache->getVars();
} elseif ($cache->startDataCache()) {
$extraData = fetchHeavyProductData($arResult['ID']);
$cache->endDataCache($extraData);
}
$arResult['EXTRA'] = $extraData;
Важно: если компонент сам использует кэш (большинство компонентов каталога), то result_modifier.php не выполняется при отдаче из кэша — выполняется только template.php. Данные, добавленные в $arResult в result_modifier.php, кэшируются вместе с $arResult.
Сравнение подходов
| Критерий |
result_modifier |
Переопределение компонента |
| Совместимость с обновлениями |
Полная |
Требуется ручной merge |
| Время на реализацию |
2–6 часов |
8–24 часа |
| Сложность поддержки |
Низкая |
Высокая |
| Экономия бюджета |
До 70 000 ₽ |
— |
Ограничения
result_modifier — не место для операций с побочными эффектами: создания записей в БД, отправки уведомлений, изменения состояния. Это только чтение и трансформация $arResult. Для побочных эффектов используйте component_epilog.php.
Нельзя изменить уже выполненные SQL-запросы компонента — только дополнить результат новыми запросами. Если нужно изменить логику получения данных — придётся переопределять сам компонент.
Процесс и сроки
Типичные этапы работы:
- Анализ: изучаем структуру
$arResult нужного компонента, определяем недостающие данные.
- Проектирование: выбираем источник данных (HL-блок, таблица, внешнее API).
- Реализация: пишем
result_modifier.php с запросом и модификацией массива.
- Кэширование: настраиваем тегированный кэш для производительности.
- Тестирование: проверяем при разных сценариях (кэш вкл/выкл, разные группы пользователей).
- Деплой: размещаем в папке шаблона, настраиваем мониторинг.
Состав работы:
- Файл
result_modifier.php с комментариями и обработкой ошибок.
- Настройка кэша (тегированный, TTL).
- Документация по добавленным полям.
- Консультация по расширению решения.
Ориентировочные сроки: большинство задач занимает 4–16 часов. Стоимость рассчитывается индивидуально — от 40 000 до 150 000 ₽ в зависимости от сложности. Получите консультацию: расскажем, как сэкономить время и бюджет.
Чек-лист типичных ошибок
- Забываете загружать модули через
Loader::includeModule.
- Не проверяете кэш компонента —
result_modifier не выполняется при готовом кэше.
- Пытаетесь изменить
$arParams — это недопустимо для модификации.
- Используете
result_modifier для записи в БД — нарушаете архитектурное назначение.
- Не экранируете или не фильтруете данные — риск XSS.
Мы занимаемся Битрикс-разработкой более 7 лет, выполнили 50+ проектов по доработке компонентов. Гарантируем стабильную работу на всех версиях платформы. Свяжитесь с нами для оценки вашего проекта — ответим в течение дня.
Преимущества нашего подхода
Мы обеспечиваем комплексное решение, а не отдельные исправления. Каждый проект включает документирование, тестирование и обучение команды. Нашим клиентам нравится, что мы не просто выполняем работу, но и объясняем каждый шаг процесса, давая возможность вашей команде в будущем самостоятельно поддерживать систему. Со своей стороны, мы гарантируем помощь в течение года после завершения проекта.
Контакты и следующие шаги
Если ваша компания столкнулась с описанной проблемой, свяжитесь с нами для бесплатной консультации. Проведём анализ вашей системы и предложим оптимальное решение. Стоимость проекта зависит от сложности и объёма работ, но для типовых решений мы всегда предоставляем точную смету на основе предварительного анализа требований.
Неправильный выбор редакции 1С-Битрикс: как это ломает проект
Купили «Малый бизнес», запустили магазин, трафик вырос до 5000 уников в день — и сайт лёг. Композитный кэш только в «Бизнес», веб-кластер тоже. Апгрейд — доплата разницы плюс работа по настройке новых модулей. Правильный подбор и настройка редакции 1С-Битрикс сразу экономят до 40% бюджета на лицензию и исключают затраты на внеплановый апгрейд (в среднем 15–30 тыс. ₽ экономии при переходе с «Малого бизнеса» на «Бизнес» заранее вместо срочного). За 8 лет работы с Битриксом мы провели более 200 апгрейдов и видели все типовые ошибки: от покупки «Старта» под каталог на 50 000 товаров до использования «Бизнеса» для лендинга с 100 посещениями в день. Наш принцип — подобрать редакцию под реальные задачи и настроить её так, чтобы не переплачивать за ненужные модули, но и не упираться в потолок при первом скачке трафика.
Редакции 1С-Битрикс: Управление сайтом
Четыре редакции, и разница между ними — не в количестве функций, а в доступных модулях ядра. Официальная документация 1С-Битрикс уточняет: композитный кэш доступен только в редакции «Бизнес» и выше.
| Модуль / возможность |
Старт |
Стандарт |
Малый бизнес |
Бизнес |
| Информационные блоки |
+ |
+ |
+ |
+ |
| Веб-формы |
+ |
+ |
+ |
+ |
| Базовый SEO |
+ |
+ |
+ |
+ |
| Блог, форум, соцсеть |
– |
+ |
+ |
+ |
Модуль sale (магазин) |
– |
– |
+ |
+ |
Обмен с 1С (catalog) |
– |
– |
+ |
+ |
Композитный кэш (main.composite) |
– |
– |
– |
+ |
Веб-кластер (cluster) |
– |
– |
– |
+ |
| Многосайтовость |
– |
– |
– |
+ |
| REST API |
– |
– |
– |
+ |
Старт — минимум, только контентные модули: iblock, form, базовая SEO. Для визиток и лендингов. Модуля sale нет — магазин не построить.
Стандарт — контент плюс коммуникации: блог, социальная сеть, форум, расширенная техподдержка. Для корпоративных сайтов и порталов с UGC.
Малый бизнес — первая редакция с e-commerce: появляется модуль sale. Комфортный потолок — до ~10 000 товаров без серьёзной оптимизации. Для небольших магазинов и каталогов с заказом.
Бизнес — полный набор: композитный кэш (TTFB падает с 800 мс до 50–80 мс — в 10–15 раз быстрее), веб-кластер, многосайтовость, мультисклад, REST API. Для крупных магазинов, маркетплейсов, проектов с 10 000+ посетителей в день.
Как не ошибиться с выбором редакции 1С-Битрикс?
Типичные ошибки
- Покупка «Старта» под интернет-магазин — модуль sale отсутствует, придётся либо апгрейдить сразу, либо костылить через кастомные заказы.
- Выбор «Малого бизнеса» для проекта, который через полгода вырастет до 10 000 товаров — композитный кэш не включить, апгрейд до «Бизнеса» обойдётся в разницу лицензий плюс работа по настройке.
- Использование «Бизнеса» для лендинга — переплата за функции, которые никогда не пригодятся.
Композитный кэш: must have для высоконагруженного проекта
Композитный кэш (main.composite) ускоряет загрузку страниц в 10–15 раз по сравнению с динамической генерацией. Для магазина с 3000+ посетителей в день без композита сервер начинает «потеть»: среднее время ответа растёт, база данных перегружается, страницы чекаута падают по таймауту. Композит решает проблему кардинально — HTML отдаётся nginx'ом без запуска PHP. Подробнее о технологии — в статье на Wikipedia. Важно правильно настроить exclude-маски для корзины, личного кабинета и страниц, где нужна актуальность данных. Мы настраиваем это на каждом апгрейде до «Бизнес».
Выбор редакции для интернет-магазина
| Тип магазина |
Рекомендуемая редакция |
Ключевое ограничение |
| До 1000 товаров, трафик до 500 уников/день |
Малый бизнес |
Нет композитного кэша (TTFB > 500 мс при пиках) |
| 1000–10 000 товаров, 500–5000 уников/день |
Малый бизнес с тюнингом или Бизнес (сразу) |
Нагрузка упирается в PHP-FPM |
| 10 000+ товаров, 5000+ уников/день |
Бизнес |
Нужен композит + кластер |
| Маркетплейс, 100 000+ товаров |
Бизнес + веб-кластер |
Горизонтальное масштабирование обязательно |
Как выбрать редакцию: жёсткие критерии
По модулям:
- Обмен с 1С (
catalog) → минимум «Малый бизнес»
- Композитный кэш (
main.composite) → только «Бизнес»
- Веб-кластер (
cluster) → только «Бизнес»
- Многосайтовость → только «Бизнес»
- REST API → только «Бизнес»
По нагрузке:
- До 1000 уников/день — любая редакция справится
- 1000–10 000 уников/день — «Малый бизнес» с тюнингом nginx/php-fpm упирается в потолок. «Бизнес» с композитным кэшем — правильный выбор
- 10 000+ уников/день — только «Бизнес» с композитом и кластером
По бюджету:
- Разница между редакциями — в 2–5 раз (например, Старт ~6 000 ₽, Бизнес ~60 000 ₽)
- Апгрейд в любой момент — доплата разницы в стоимости лицензий
- Наш принцип: берите минимально достаточную. Но если знаете, что через полгода понадобится композит — берите «Бизнес» сразу, потому что апгрейд — это ещё и работа по настройке
Почему апгрейд редакции выгоднее при правильном выборе?
1С-Битрикс позволяет повышать редакцию без переустановки — данные сохраняются. Процесс:
- Доплата разницы в стоимости лицензии
- Активация нового ключа: «Настройки» → «Обновления» → «Регистрация»
- Установка ставших доступными модулей через админку
- Настройка нового функционала
- Тестирование совместимости
Что мы делаем при апгрейде:
- Проверяем кастомный код на конфликты с новыми модулями — особенно если есть собственные обработчики событий
OnBeforeOrderAdd, OnSaleBasketSaved
- Включаем и настраиваем композитный кэш — корректные exclude-маски для динамических страниц (корзина, чекаут, личный кабинет)
- Настраиваем мультисклад, если нужно —
b_catalog_store, правила выбора склада
- Прогоняем весь функционал на staging
- Документируем изменения
Что вы получаете в результате:
- Рабочий сайт на новой редакции без потери данных
- Настроенный композитный кэш (если перешли на «Бизнес»)
- Протокол тестирования и рекомендации по дальнейшей оптимизации
- Доступы к staging и документация по изменениям
Лицензия: продление и риски
Активная лицензия даёт обновления — новые версии, патчи безопасности, багфиксы, доступ к маркетплейсу и техподдержку вендора. При истечении сайт продолжает работать, но остаётся без обновлений. Для магазинов это опасно — патчи безопасности закрывают уязвимости в модулях sale, catalog, main. Утечка данных из b_sale_order или b_user — вопрос времени. Продление стоит кратно меньше покупки новой лицензии. Регулярное продление — страховка от незакрытых CVE.
Связка «Управление сайтом» + Битрикс24
Частый сценарий: сайт на 1С-Битрикс + CRM в Битрикс24. Заказы из b_sale_order автоматически превращаются в лиды или сделки, работает единая авторизация, синхронизация клиентской базы. Формы сайта (form или кастомные) ведут в воронку CRM. Это две отдельные лицензии и два отдельных продукта — интеграция между ними штатная и стабильно работает.
Рекомендации из практики
- Не экономьте на редакции, если точно знаете, что функционал понадобится через полгода. Апгрейд редакции — та же доплата плюс работа по настройке и тестированию.
- Бизнес для проектов с амбициями роста — композитный кэш окупает разницу в цене при первом скачке трафика. Без композита 3000+ уников/день — сервер начинает потеть.
- Битрикс24 и «Управление сайтом» — разные продукты, разные лицензии. Путаница здесь стоит денег.
- Продлевайте лицензию ежегодно — стоимость продления кратно ниже покупки новой, а без обновлений вы остаётесь с незакрытыми CVE.
Что мы предлагаем: подбор и настройка под ключ
Мы не просто консультируем — берём на себя полный цикл: анализ текущего проекта, подбор редакции, закупку лицензии (если нужно), миграцию, настройку всех модулей и обучение команды. В рамках услуги вы получаете:
- Акт выбора редакции с обоснованием
- План миграции (если апгрейд)
- Развёрнутый staging с новой редакцией
- Настройку композитного кэша и кластера (при необходимости)
- Документацию по новой конфигурации
- Гарантию работоспособности после перехода
Позвоните нам или оставьте заявку — расскажем, какая редакция подойдёт конкретно под ваш проект, нагрузку и планы роста. Закажите консультацию — оценим ваш проект за один день и предложим оптимальную конфигурацию. Получите персональный расчёт стоимости подбора и настройки редакции 1С-Битрикс прямо сейчас.