Введение
Современный 1С-Битрикс давно ушел от концепции «CMS старой школы» с глобальными переменными и прямыми SQL-запросами.
Переход на ядро D7 превратил платформу в мощный PHP-фреймворк. Чтобы ваш код был безопасным, производительным и легко поддерживаемым, мы подготовили .
«Золотой стандарт» современного Битрикс-разработчика
Используйте этот чек-лист при написании нового функционала и проведении Code Review (ревью кода).
Шаг 1. Работа с базой данных и инфоблоками (ORM D7)
Современный подход требует полного отказа от прямых обращений к БД и минимизации использования старого API там, где это возможно.
✅ Использовать:
- D7 ORM (‘\Bitrix\Main\OR\Bitrix\Main\ORM\Data\DataManager, , getListfetchObject, ).fetchCollection
- Сгенерированные классы инфоблоков (API символьный код):
- Начиная с версии 20.0, для выборки элементов и их свойств используйте ‘\Bitrix.\Bitrix\Iblock\Elements\Element[API_CODE]Table
- Связи (Relations): Использовать и механизм ReferenceFieldruntime полей для JOIN-запросов вместо тяжелых циклов внутри PHP.
❌ Избегать:
- Прямых SQL-запросов через .$DB->Query
- Старого класса (оставьте его CIBlockElement::GetList
- только для легаси-проектов или специфичных сложных фильтраций, которые пока не поддерживает ORM).
💡 Пример чистого кода (D7 ORM):
use \Bitrix\Iblock\Elements\ElementCatalogTable;
use \Bitrix\Main\Entity\ReferenceField;
$products = ElementCatalogTable::getList([
'select' =>['ID', 'NAME', 'PRICE_' => 'PRICE_ELEM.PRICE'],
'filter' => ['=ACTIVE' => 'Y'],
'runtime' =>[
new ReferenceField(
'PRICE_ELEM',
\Bitrix\Catalog\PriceTable::class,
['=this.ID' => 'ref.PRODUCT_ID']
)
],
'limit' => 10
])->fetchCollection();
foreach ($products as $product) {
echo $product->getName();
}Шаг 2. Разработка компонентов и AJAX
Логика должна быть строго инкапсулирована по паттерну MVC.
✅ Использовать:
- Разработку через с наследованием от class.php \CBitrixComponent.
- Интерфейс и метод \Bitrix\Main\Engine\Contract\ControllerableconfigureActions для обработки AJAX внутри компонента.
- Строгую типизацию параметров и возвращаемых значений.
❌ Избегать:
- Написания бизнес-логики в и (они только для подготовки данных к выводу)
- .template.php result_modifier.php
- Использования устаревшего файла в новых компонентах
- .component.php
💡
На фронтенде вызывайте методы через нативный JS:
Лучшая практика для AJAX:BX.ajax.runComponentAction(‘vendor:component.name’, ‘actionName’, { mode: ‘class’, data: {…} }). Обязательно используйте механизм подписанных параметров ().\Bitrix\Main\Component\ParameterSigner
Шаг 3. Фронтенд и клиентская оптимизация (JS/CSS)
Битрикс предоставляет мощный API для работы с ассетами, который нужно использовать правильно.
✅ Использовать:
- JS-расширения (Extensions): Создавайте файлы в папке config.php/local/js/vendor/ и подключайте их через .\Bitrix\Main\UI\Extension::load(‘vendor.myplugin’);
- Отложенную инициализацию через .BX.ready
- Современные UI-компоненты Битрикс ().BX.UI.*
❌ Избегать:
- Прямого вывода тегов и <script><link> в или .header.php template.php
- Бесконтрольного подключения jQuery (большинство задач отлично решается нативным или Vanilla JS).BX
Шаг 4. Окружение, Request и настройки
Глобальные переменные — главный враг безопасного и тестируемого кода.
✅ Использовать:
- Классы D7 для доступа к среде: , , .ApplicationContextRequest
- Класс для получения настроек модулей.\Bitrix\Main\Config\Option::get()
- Класс вместо .\Bitrix\Main\Application::getDocumentRoot()
- $_SERVER[‘DOCUMENT_ROOT’]
❌ Избегать:
- Обращения к суперглобальным массивам , ‘$_GE $_POST $_GET, и .$_REQUEST $_SERVER
- Использования глобальных переменных, внутри методов классов (используйте $APPLICATION $USER $DBglobal $USER;
- только в крайнем случае легаси, в D7 есть ). \Bitrix\Main\Engine\CurrentUser::get()
💡 Пример правильного получения данных из GET-запроса:
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
$productId = $request->getQuery("id"); // Эквивалент $_GET['id']
$productName = $request->getPost("name"); // Эквивалент $_POST['name']Шаг 5. Отладка, Логирование и Обработка ошибок
Профессиональный код не должен падать с «белым экраном» или скрывать ошибки.
✅ Использовать:
- Монитор производительности для профилирования запросов.
- Блоки с обработкой нативных исключений Битрикс (например, try-catch\Bitrix\Main\SystemException).
- Стандарт PSR-3: или системный метод \Bitrix\Main\Diag\Logger\Bitrix\Main\Diag\Debug::dumpToFile().
❌ Избегать:
- Устаревшей функции .AddMessage2Log()
- Конструкций с «собакой» (подавление ошибок) — это замедляет работу PHP и скрывает баги.@
Шаг 6. Архитектура проекта
Порядок в файловой системе — залог быстрого погружения новой команды в проект.
✅ Использовать:
- Контроллеры D7 (\Bitrix\Main\Engine\Controller) для реализации единого REST API и обработки глобальных AJAX-запросов.
- Агенты на CRON (откажитесь от выполнения агентов на хитах пользователей).
- Событийную модель D7: Регистрация событий только через в файле \Bitrix\Main\EventManagerinit.php.
✅ Структура директорий:
- Весь кастомный код, шаблоны, компоненты и модули должны располагаться только в директории /local/ .
- Папку /bitrix/ трогать запрещено .
- Используйте (файл в корне) для подключения сторонних PHP-библиотек.
- Composer composer.json
Заключение: Почему это важно?
1С-Битрикс — это живая, постоянно развивающаяся экосистема. Современное ядро D7 предоставляет инструменты, сопоставимые с популярными PHP-фреймворками (Laravel, Symfony).
Следование этим стандартам решает 3 главные задачи:
- Скорость: ORM и правильное кеширование снижают нагрузку на БД в десятки раз.
- Безопасность: Использование D7 Request защищает от SQL-инъекций и XSS-атак.
- Поддержка: Ваш код становится чистым, предсказуемым и понятным для любого Middle/Senior разработчика.
Пишите красиво, используйте актуальное API и удачи в ваших проектах!
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru