Небольшая обзорная статья по Битрикс D7. Сначала идёт развернутое описание и сравнение со старым ядром, затем приводятся примеры использования.

1. Введение
Ядро D7 (иногда просто D7) – это современное ядро для платформы Bitrix Framework, которое пришло на смену старому «процедурному» ядру. Оно призвано упростить и стандартизировать процесс разработки на 1С-Битрикс, а также сделать код более гибким, безопасным и легко поддерживаемым. В рамках D7 была реализована концепция, основанная на принципах современного программирования: использование неймспейсов (namespaces), ORM (Object-Relational Mapping), событийной модели, стандартов PSR и т.д.
2. История и отличия от старого ядра
2.1 Старое ядро
- Процедурный подход
В старом ядре активно использовался процедурный код, глобальные переменные, функции с префиксамиC...
, что усложняло отладку и сопровождение. - Ограниченная модульность
Модули были разделены, но структурно часто переплетались: чтобы изменить часть функционала, приходилось «влезать» в код ядра, что могло привести к проблемам при обновлении. - Отсутствие полноценного ORM
Работа с БД шла через классические запросыSELECT
,INSERT
,UPDATE
. Упрощённых оберток или вспомогательных функций иногда не хватало для сложных операций. - Событийная модель
Система событий существовала, но работала не всегда единообразно. Приходилось создавать обработчики черезAddEventHandler
, часто разбросанные по разным файлам.
2.2 Новое ядро D7
- Объектно-ориентированный подход
Использование неймспейсов, классов и интерфейсов с PSR-совместимым кодом. Код стал более структурированным и гибким. - Отдельные пространства имён
Модули помещены в пространство имён: например,Bitrix\Main\
,Bitrix\Sale\
,Bitrix\Iblock
и т.д. - ORM (Object-Relational Mapping)
Введена своя ORM-библиотека, которая сильно упрощает работу с БД и позволяет писать код, не беспокоясь о тонкостях SQL-запросов. - Новая событийная модель
Используется классEventManager
, который даёт больше контроля при регистрации и выполнении обработчиков. - Автозагрузка (Autoload)
Автоматическая загрузка классов (PSR-4-подобный механизм), что уменьшает необходимость подключать файлы вручную. - Соблюдение стандартов
Код в рамках D7 придерживается стандартов (PSR-1, PSR-2, частично PSR-4), что облегчает интеграцию с различными инструментами и библиотеками.
3. Основные компоненты D7
3.1 ORM
Одним из главных преимуществ D7 является Object-Relational Mapping. ORM позволяет представлять таблицы в базе данных в виде классов-моделей, а строки – в виде объектов.
Класс DataManager
Для каждой таблицы создаётся класс, наследующий Bitrix\Main\Entity\DataManager
. Пример (упрощённо для таблицы my_table
):
namespace My\Module;
use Bitrix\Main\Entity;
class MyTable extends Entity\DataManager
{
public static function getTableName()
{
return 'my_table';
}
public static function getMap()
{
return [
new Entity\IntegerField('ID', [
'primary' => true,
'autocomplete' => true
]),
new Entity\StringField('NAME', [
'required' => true
]),
new Entity\DatetimeField('DATE_CREATE', [
'default_value' => new \Bitrix\Main\Type\DateTime()
]),
];
}
}
Получение данных
use My\Module\MyTable;
$result = MyTable::getList([
'select' => ['ID', 'NAME'],
'filter' => ['>ID' => 10],
'order' => ['ID' => 'DESC'],
'limit' => 5
]);
while ($row = $result->fetch()) {
echo $row['ID'] . ': ' . $row['NAME'] . '<br>';
}
Добавление/обновление записей
// Добавление
$addResult = MyTable::add([
'NAME' => 'Новая запись'
]);
if ($addResult->isSuccess()) {
$newId = $addResult->getId();
echo "Добавлен элемент с ID: " . $newId;
} else {
print_r($addResult->getErrorMessages());
}
// Обновление
$updateResult = MyTable::update($newId, [
'NAME' => 'Новое название'
]);
if (!$updateResult->isSuccess()) {
print_r($updateResult->getErrorMessages());
}
Удаление записей
$deleteResult = MyTable::delete($newId);
if (!$deleteResult->isSuccess()) {
print_r($deleteResult->getErrorMessages());
}
3.2 Событийная модель (Event Manager)
Вместо старых методов AddEventHandler
и т.д. теперь удобно использовать Bitrix\Main\EventManager
.
Пример подключения обработчика (например, в файле /bitrix/php_interface/init.php
или в своём модуле):
use Bitrix\Main\EventManager;
EventManager::getInstance()->addEventHandler(
'main',
'OnBeforeUserRegister',
['\My\Module\Handlers\User', 'OnBeforeUserRegisterHandler']
);
Класс-обработчик:
namespace My\Module\Handlers;
use Bitrix\Main\Event;
class User
{
public static function OnBeforeUserRegisterHandler(Event $event)
{
$parameters = $event->getParameters();
// Вносим изменения
$parameters['FIELDS']['LOGIN'] = strtolower($parameters['FIELDS']['LOGIN']);
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, $parameters);
}
}
3.3 Автозагрузка классов
D7 поддерживает автозагрузку по неймспейсам: если класс лежит по пути local/modules/my.module/lib/handlers/user.php
, а его пространство имён – My\Module\Handlers
, то он подхватится автоматически. В старом ядре приходилось подключать файлы вручную через require_once
или CModule::IncludeModule
.
3.4 Миграции (не входит в стандарт, но часто используется)
D7 не содержит встроенной системы миграций как, например, Laravel, однако появились сторонние решения, которые часто интегрируются с D7. Они позволяют организовать структуру БД и версии модулей централизованно.
4. Преимущества D7
- Упрощение кода
Меньше boilerplate-кода, больше объектно-ориентированной структуры. - Наглядность
ORM упрощает чтение и понимание запросов к базе. - Безопасность
Механизмы валидации и автоматическая экранизация данных снижают риск SQL-инъекций. - Расширяемость
Новая событийная модель и PSR-автозагрузка упрощают подключение библиотек и сторонних решений. - Поддержка современных стандартов
Код, написанный по стандартам PSR, легче поддерживать и интегрировать в CI/CD.
5. Примеры использования
5.1 Создание собственного модуля
- Структура папок
local/modules/my.module/ ├── install/ │ ├── version.php │ ├── ... ├── lib/ │ └── mytable.php ├── include.php └── ...
- Создание класса для работы с таблицей
Вlib/mytable.php
создаём класс-наследникDataManager
. - Регистрация модуля
Вinstall/index.php
прописываем логику установки и удаления модуля. - Подключение обработчиков событий
Вinclude.php
или вlib/eventhandlers.php
.
5.2 Использование ORM с фильтрами и группировками
use Bitrix\Main\Type\DateTime;
use My\Module\MyTable;
$result = MyTable::getList([
'select' => ['COUNT_ID' => new \Bitrix\Main\Entity\ExpressionField('COUNT_ID', 'COUNT(*)')],
'filter' => [
'>DATE_CREATE' => new DateTime('01.01.2023')
],
'group' => []
]);
$data = $result->fetch();
echo "Всего элементов: " . $data['COUNT_ID'];
6. Советы и рекомендации
- Переходите на D7 постепенно
Если у вас уже есть проект на старом ядре, не нужно переписывать всё сразу. Можно внедрять D7 в отдельных модулях, новых разделах или функциональных блоках. - Используйте единый стандарт кодирования
Настройте линтер (PHPCS, PHP CodeSniffer) под PSR, чтобы код был более читаемым. - Документируйте таблицы и поля
ЗаполнениеgetMap()
вDataManager
— хороший повод внести ясность в типы полей, обязательность и т.д. - Следите за актуальными обновлениями
Битрикс развивается, в новых версиях могут появляться дополнительные возможности ядра D7.
Итоги
Новая модель D7 в 1С-Битрикс (Bitrix Framework) — это существенный шаг вперёд по сравнению со старым ядром. Она обеспечивает современный подход к разработке, снижает сложность поддержки, улучшает безопасность и стабильность кода. ORM позволяет читать и писать данные, не погружаясь в низкоуровневые SQL-запросы, а продуманная событийная модель повышает гибкость проекта.
Если вы начинаете новый проект, рекомендуется сразу писать код на D7; если у вас уже есть устаревший проект, переход можно выполнять постепенно.