Расширение логики стандартных компонентов без копирования 1С-Битрикс

Мы часто встречаем проекты, где разработчики копируют стандартные компоненты Битрикс. Это приводит к проблемам при обновлениях. Представьте: ваш интернет-магазин проработал год. Вы скопировали catalog.section, добавили кастомные поля и рейтинг. Выходит мажорное обновление — вы тратите два дня на сли
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Расширение логики стандартных компонентов без копирования 1С-Битрикс
Средний
~1-2 недели

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

Часто задаваемые вопросы

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

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

Мы часто встречаем проекты, где разработчики копируют стандартные компоненты Битрикс. Это приводит к проблемам при обновлениях. Представьте: ваш интернет-магазин проработал год. Вы скопировали catalog.section, добавили кастомные поля и рейтинг. Выходит мажорное обновление — вы тратите два дня на слияние изменений. Через полгода снова обновление — и снова головная боль. Каждая копия компонента превращается в технический долг, который тормозит развитие и увеличивает стоимость поддержки.

По нашей статистике, 80% проектов с копиями компонентов требуют тотального рефакторинга при переходе на новую мажорную версию. Замена копий на родные механизмы расширения окупается уже через 4-6 месяцев: время на обновления сокращается в 5 раз, исчезают баги совместимости.

Мы — команда с 8-летним опытом разработки на Битрикс. Завершили 40+ проектов по рефакторингу и модернизации. Помогаем компаниям избавиться от копий компонентов без потери функциональности. Свяжитесь с нами для консультации — оценим ваш проект.

Какие механизмы расширения предоставляет Битрикс?

Битрикс предлагает четыре способа расширить логику стандартного компонента без его копирования: result_modifier.php, события, классы-расширения и компонент-обёртка.

result_modifier.php — быстрое дополнение данных

Файл result_modifier.php в папке шаблона выполняется после основной логики компонента, но до вывода шаблона. Вы получаете ссылку на $arResult и можете добавлять или изменять данные. Например, подгрузить рейтинги товаров из внешнего сервиса:

<?php // /local/templates/my_site/components/bitrix/catalog.section/.default/result_modifier.php if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die(); $ids = array_column($arResult['ITEMS'], 'ID'); if ($ids) { $ratings = MyRatingService::getAverageForItems($ids); foreach ($arResult['ITEMS'] as &$item) { $item['MY_RATING'] = $ratings[$item['ID']] ?? 0; } } 

Этот метод прост, но не позволяет изменить SQL-запрос компонента. Для вмешательства в запрос нужны события.

События компонента — вмешательство на уровне запросов

Большинство стандартных компонентов генерируют события. Например, OnBeforeIBlockElementGetList позволяет модифицировать фильтр выборки. Вот как скрыть товары без цены:

// /local/php_interface/init.php \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'iblock', 'OnBeforeIBlockElementGetList', function (\Bitrix\Main\Event $event) { $filter = $event->getParameter('filter'); $filter['!CATALOG_PRICE_1'] = false; $event->setParameter('filter', $filter); return $event; } ); 

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

Класс-расширение — максимальная гибкость

Создаёте класс-наследник в /local/components/bitrix/имя_компонента/class.php. Битрикс автоматически подхватит его вместо оригинального. Шаблоны при этом остаются из /bitrix/. Пример — добавляем признак "новинка" для товаров, созданных менее 30 дней назад:

<?php // /local/components/bitrix/catalog.section/class.php \Bitrix\Main\Loader::includeModule('iblock'); \Bitrix\Main\Loader::includeModule('catalog'); class MyCatalogSectionComponent extends \Bitrix\Iblock\Component\ElementList { protected function getFilter(): array { $filter = parent::getFilter(); $filter['!PREVIEW_PICTURE'] = false; // скрыть товары без изображения return $filter; } protected function prepareElementData(array $element): array { $element = parent::prepareElementData($element); $element['IS_NEW'] = (time() - strtotime($element['DATE_CREATE'])) < 86400 * 30; return $element; } } 

Этот подход сохраняет обновляемость: при выходе новой версии Битрикс ваш класс наследует улучшения родительского компонента. Сравните: ручное слияние копии занимает от 2 до 8 часов, а при использовании класса-расширения — 0 часов. Класс-расширение позволяет наследовать поведение стандартного компонента, сохраняя возможность обновления ядра (из документации Битрикс).

Компонент-обёртка — полная замена логики

Если нужно полностью переопределить логику, но вызывать оригинал — создаёте компонент с другим именем. Используется редко, обычно для агрегации данных из нескольких компонентов.

Сводная таблица механизмов

Задача Рекомендуемый механизм
Добавить вычисляемое поле к результату result_modifier.php
Изменить SQL-фильтр Событие OnBefore*
Расширить бизнес-логику Класс-расширение в /local/
Полная замена с сохранением шаблонов Класс-расширение + переопределение методов
Переиспользовать компонент с другими параметрами Компонент-обёртка

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

Ответ прост: используйте класс-расширение или события. Они сохраняют совместимость с ядром и не требуют ручного слияния при обновлении. Результат — снижение времени на обновление на 80% и экономия на поддержке до 40%.

Как выбрать подходящий механизм?

Если нужно быстро добавить поле — result_modifier.php. Если требуется изменить запрос — события. Для серьёзной бизнес-логики — класс-расширение. Компонент-обёртка — для случаев, когда нужно полностью изменить поведение.

Как мы реализуем расширение компонентов без копирования?

Наш подход — использовать родные механизмы Битрикс, сохраняя обновляемость. Процесс включает пять этапов:

  1. Аудит кодовой базы — находим все копии компонентов, оцениваем объём и сложность.
  2. Проектирование — выбираем оптимальный механизм для каждого случая.
  3. Реализация — пишем классы-расширения, обработчики событий, модификаторы.
  4. Тестирование — проверяем совместимость с шаблонами и кастомными доработками.
  5. Поддержка — предоставляем документацию, обучаем вашу команду и даём гарантию на 12 месяцев.

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

  • Полный отказ от копий компонентов (рефакторинг).
  • Оптимизация запросов и кэширования.
  • Тестирование на всех канонических сценариях.
  • Обучение вашей команды работе с расширениями.
  • Гарантия обратной совместимости.

Пример из практики: для интернет-магазина с каталогом из 50 000 товаров мы заменили 12 копий компонентов на классы-расширения. Время обновления ядра сократилось с 3 дней до 4 часов. Экономия на поддержке — 40% в год.

Сроки и стоимость

Тип работ Ориентировочные сроки
Расширение одного компонента (result_modifier) 2–4 часа
Расширение через класс-наследник 1–3 дня
Рефакторинг всех копий компонентов 3–8 дней (зависит от количества)

Точная стоимость рассчитывается индивидуально после аудита. Готовы избавиться от копий компонентов? Закажите аудит — наши инженеры оценят проект и предложат оптимальное решение.