Презентация нового ядра Bitrix d7 - это почти двухчасовой доклад на партнерской конференции 2013 года. Если вы не смогли осилить его просмотр, то предлагаю вам котороткий конспект о самом главном - какие преимущества принесет новое ядро, и основы работы с ним.
[spoiler]
Все свои файлы в папке /local/
Отныне весь код отдельного сайта можно размещать в папке /local/, а не как раньше в /bitrix/templates/, /bitrix/components/имя/ и т.д. Это существенно упростит командную разработку с использованием систем контроля версий, и позволит полностью отделить код разработки сайта от ядра.
Подключаем только header
Код обычной страницы в публичной части теперь будет выглядеть так:
При этом, по словам разработчиков, теперь не нужно использовать отложенные функции, т.к. сначала подключается ядро, потом шаблон страницы, т.е. значения свойств страниц должны быть доступны и в хедере, а не только в футере.
Примечание: пока мне не удалось запустить данный функционал, возможно он только планируется, но еще не реализован. Если вам удалось, отпишитесь, пожалуйста, в комментариях.
Отказ от глобальных переменных
Теперь вместо глобальных переменных, таких как $APPLICATION, $USER, $DB, $CACHE_MANAGER, и т.д., будут использоваться специальные объекты.
ORM (Object-relational mapping)
Это значит, что будет елиный синтаксис GetList, Add, Update, Delete, в отличие от ситуации на данный момент, когда, например, параметры CUser::GetList сильно отличаются от параметров того же CIBlockElement::GetList. Также будет стандартизирован синтаксис параметра $arFilter, который на данный момент также сильно различается от модуля к модулю. Еще разработчики обещают, что для каждого метода будут реализованы события, и синтаксис их, вероятно, тоже будет единым. Это будет реализовано благодаря тому, что все классы будут наследоваться от базового класса Entity, в котором уже будут реализовано все, что необходимо, включая события (но каждый метод базового класса при желании можно будет и переопределить).
Синтаксис нового getList будет принимать только один массив в качестве параметра, в котором в произвольном порядке можно будет указать любой набор нужный параметров из следующих:
Методы же add, update, delete теперь будут возвращать типизированные объекты AddResult, UpdateResult и DeleteResult соответственно, в которых будет содержаться информация об успешности операции и ошибки при их наличии.
Класс Bitrix\Main\Config
Этот новый класс объединяет как настройки модулей, хранимые в БД (Bitrix\Main\Config\Option, ранее COption), так и настройки ядра - Bitrix\Main\Config\Configuration (альтернатива константам в dbconn.php).
Подключение модулей (теперь модули подключаются через класс \Bitrix\Main\Loader)
Исключения
Теперь если вы, например, ошиблись в написании названия параметра фильтра в GetList, данный параметр не будет проигнорирован как раньше, и не будут выбраны все элементы, а скрипт остановится с ошибкой.
Что нужно знать разработчикам модулей
Классы функций теперь должны размещаться в подпапке lib в папке модуля. При этом, если название файла с классом будет соответствовать пространству имен, то автоподгрузка класса будет включена автоматически, т.е. теперь не нужно будет пользоваться функцией CModule::AddAutoloadClasses (хотя ее использование пока не запрещается, но теперь эта функция называется Loader::registerAutoLoadClasses).
[spoiler]
Все свои файлы в папке /local/
Отныне весь код отдельного сайта можно размещать в папке /local/, а не как раньше в /bitrix/templates/, /bitrix/components/имя/ и т.д. Это существенно упростит командную разработку с использованием систем контроля версий, и позволит полностью отделить код разработки сайта от ядра.
Подключаем только header
Код обычной страницы в публичной части теперь будет выглядеть так:
|
Примечание: пока мне не удалось запустить данный функционал, возможно он только планируется, но еще не реализован. Если вам удалось, отпишитесь, пожалуйста, в комментариях.
Отказ от глобальных переменных
Теперь вместо глобальных переменных, таких как $APPLICATION, $USER, $DB, $CACHE_MANAGER, и т.д., будут использоваться специальные объекты.
ORM (Object-relational mapping)
Это значит, что будет елиный синтаксис GetList, Add, Update, Delete, в отличие от ситуации на данный момент, когда, например, параметры CUser::GetList сильно отличаются от параметров того же CIBlockElement::GetList. Также будет стандартизирован синтаксис параметра $arFilter, который на данный момент также сильно различается от модуля к модулю. Еще разработчики обещают, что для каждого метода будут реализованы события, и синтаксис их, вероятно, тоже будет единым. Это будет реализовано благодаря тому, что все классы будут наследоваться от базового класса Entity, в котором уже будут реализовано все, что необходимо, включая события (но каждый метод базового класса при желании можно будет и переопределить).
Синтаксис нового getList будет принимать только один массив в качестве параметра, в котором в произвольном порядке можно будет указать любой набор нужный параметров из следующих:
- 'select' - массив выбираемых полей
- 'filter' - массив фильтра
- 'group' - массив полей группировки
- 'order' - массив сортировки
- 'limit' - ограничение количества
- 'offset' - смещение от начала
- 'count_total' - подсчет количества записей
Методы же add, update, delete теперь будут возвращать типизированные объекты AddResult, UpdateResult и DeleteResult соответственно, в которых будет содержаться информация об успешности операции и ошибки при их наличии.
Класс Bitrix\Main\Config
Этот новый класс объединяет как настройки модулей, хранимые в БД (Bitrix\Main\Config\Option, ранее COption), так и настройки ядра - Bitrix\Main\Config\Configuration (альтернатива константам в dbconn.php).
Подключение модулей (теперь модули подключаются через класс \Bitrix\Main\Loader)
|
Исключения
Теперь если вы, например, ошиблись в написании названия параметра фильтра в GetList, данный параметр не будет проигнорирован как раньше, и не будут выбраны все элементы, а скрипт остановится с ошибкой.
Что нужно знать разработчикам модулей
Классы функций теперь должны размещаться в подпапке lib в папке модуля. При этом, если название файла с классом будет соответствовать пространству имен, то автоподгрузка класса будет включена автоматически, т.е. теперь не нужно будет пользоваться функцией CModule::AddAutoloadClasses (хотя ее использование пока не запрещается, но теперь эта функция называется Loader::registerAutoLoadClasses).
03.06.201416:2803.06.2014 16:28:12