Немного теории
Файлы ядра платформы “1C-Битрикс: Управление сайтом” располагаются в папке /bitrix. Все остальное составляет публичную часть сайта. В публичной части сайта файл - это страница сайта, а папка - его раздел.
Код ядра модифицировать нельзя!
Как уже упоминалось в предыдущих уроках, в код ядра платформы категорически запрещено вносить свои изменения. Это затрудняет обновление системы, следовательно, делает ее более уязвимой и менее производительной.
Внутри папки /bitrix также присутствует определенное разделение. Из того, что наиболее часто нам пригодится в дальнейших уроках, здесь можно выделить:
Путь: /bitrix/... | Что находится |
---|---|
components/ | Стандартные компоненты, а также компоненты модулей, устанавливаемых через Marketplace |
modules/ | Файлы стандартных модулей и модулей из Marketplace/th> |
templates/ | Стандартные шаблоны сайтов |
php_interface/ | Каталог со служебными файлами |
В перечисленных выше подкаталогах папки /bitrix/ допустимо размещать и собственные модули, шаблоны, компоненты и служебные скрипты (не трогая стандартные!).
Однако начиная с версии главного модуля 14.0.1, для любых пользовательских доработок в системе предусмотрена отдельная папка /local/. Благодаря ей можно организовать четкое разделение кастомного и стандартного кодов. Это особенно удобно, учитывая, что код ядра обычно не включается в отслеживание через Git, и для этого в .gitignore добавляется правило по игнорированию папки /bitrix/.
/local/
Папка /local/ имеет ту же структуру, что и /bitrix/, но при этом ее подпапки обладают большим приоритетом, чем одноименные в /bitrix/.
Где предпочтительнее размещать собственные компоненты, шаблоны и модули - в папке /local/. С этим разобрались, а что насчет остальной кастомной бизнес-логики (собственные функции, классы, обработчики событий, методы агентов и т.п.)?
В некоторых проектах можно встретить ситуацию, когда кастомный код располагают в файле init.php, находящийся в папке /local/php_interface/ или /bitrix/php_interface/. Если сайтов несколько, то init.php также может быть свой под каждый сайт. Тогда такие файлы будут находиться в подпапках папки php_interface, названных как “ID сайта”.
Особенность init.php в том, что он автоматически подключается в прологе, а потому исполняется на всех страницах сайта (где подключается ядро платформы).
Отсюда появляется соблазн использовать этот файл для регистрации обработчиков событий, подключения вспомогательных скриптов и классов, объявления общедоступных функций и констант, а также размещения логики, требующей выполнения на каждой странице. Это выглядит простым и быстрым вариантом решения той или иной задачи.
НО! Подобный вариант размещения собственных доработок рано или поздно приводит к разрастанию init.php, беспорядку в коде проекта, трудностям его масштабирования и передаче новым разработчикам. Поэтому такой подход крайне не рекомендуется, а по использованию init.php предусмотрен ряд правил, рекомендуемых к соблюдению.
init.php
Не рекомендуется размещать весь кастомный код в одном init.php!
Хорошим тоном считается выделение всего кастомного кода в собственный модуль.
В вопросе о размещении кастомного кода в проекте на “1C-Битрикс: Управление сайтом” хорошим тоном считается выделение всего кастомного кода в собственный модуль (или несколько модулей, если это необходимо по смыслу).
Собственные классы при таком подходе размещаются в папке модуля /lib и автоматически загружаются при подключении самого модуля (при условии, что имена классов и пространств имен удовлетворяют правилам ядра D7). Подключение файлов с произвольными функциями, константами, внешними библиотеками можно добавить в файл модуля include.php, который вызывается при подключении модуля.
Практика
В этом видеоуроке вы создадите на сайте модуль для размещения в нем собственных доработок, а также потренируетесь приводить в порядок файл init.php, если к моменту передачи проекта вам, в нем уже накопилась некоторая кастомная логика.
Где размещать свой код
21 мин
Полезные ссылки и материалы