В системе Bitrix главный модуль играет важную роль в работе всей системы, поэтому его так же называют ядром системы. Связано это с тем, что задействован он практически в каждом модуле и компоненте, и является неотъемлемой частью любого проекта. Главный модуль содержит методы для выполнения различных инициализаций и подключений данных в проекте, управления структурой формируемого документа, а также много других полезных функций.
В данном посту мы рассмотрим одни из популярных и востребованных примеров использования главного модуля при написании кода.
Как мы знаем из опыта, каждый модуль в системе Bitrix имеет свой символьный код. Посредством главного модуля мы можем подключать любой установленный модуль в системе:
\Bitrix\Main\Loader::includeModule('iblock');
Данный код подключает модуль с кодом iblock – модуль информационных блоков, после чего нам будут доступны методы, которые есть в этом модуле. Таким же образом подключаются и другие модули, к примеру, sale, catalog, и др.
Языковые файлы, как и во многих других движках используются для реализации мультиязычности проекта. Таким образом, языковой файл содержит переводы различных текстовых сообщений, которые могут быть актуальны для текущего языка сайта. Это бывает удобно при ведении проекта на множестве языков. Так к примеру, если мы хотим получить текст сообщения в компоненте, из языкового файла, мы можем обратиться к методу getMessage() в главном модуле:
\Bitrix\Main\Localization\Loc::getMessage('CONFIRM_MESSAGE');
Методу передаётся код сообщения, после чего, метод вернёт текст сообщения, который так же должен быть прописан в языковом файле.
Практический в каждом проекте возникает необходимость использования css-стилей либо js-файлов в шаблоне. Мы так же можем подключать необходимые файлы для фронтенда. При таком подходе мы можем складывать все файлы стилей и скриптов в одну папку, и подключать их в нужных участках кода посредством методов:
\Bitrix\Main\Page\Asset::getInstance()->addCss("/local/templates/my_template/css/style.css"); \Bitrix\Main\Page\Asset::getInstance()->addJs("/local/templates/my_template/js/script.js");
В этом примере два основных метода для подключения статики в заголовок документа:
addCss() – выполняет подключение файлов CSS-стилей;
addJs() – выполняет подключение JS-файлов. В качестве параметра передаётся путь к файлам, относительно корня сайта.
В системе Bitrix каждый модуль может иметь некоторый набор параметров, которые используются для его работы. Эти параметры хранятся в отдельной таблице b_option. Мы так же можем получить значения этих параметров в других участках кода, обратившись к специальному методу главного модуля.
$option = \Bitrix\Main\Config\Option::get('main', 'email_from');
Методу мы передаём два параметра, первый – MODULE_ID, это символьный код модуля. Второй параметр — NAME, это код параметра, значение которого следует получить.
Довольно часто процесс разработки сопряжен с необходимостью отладки кода. При отладке мы можем выводить некоторые данные из переменных в файл, чтобы посмотреть их содержимое во время выполнения работы скрипта. Для записи лога доступен специальный метод dumpToFile():
// будет использована функция для вывода var_dump() use Bitrix\Main\Diag\Debug; Debug::dumpToFile($arResult);
В качестве параметра методу передаётся содержимое переменной $arResult. Данные из этой переменной будут отправлены в файл с использованием функции var_dump(). В этом файле можно будет посмотреть содержимое переменной с указанием типов данных. На самом деле методу может быть передано три параметра. Согласно документации, имя файла можно передать третьим параметром. Однако по умолчанию файл так же будет создан, относительно корня сайта, с названием __bx_log.txt.
Вывод в файл можно произвести и аналогичным методом, который будет выведен с использованием функции print_r():
Debug::writeToFile($_SERVER); Debug::dump($_SERVER);
Чтобы проверить скорость выполнения определённого участка кода, в системе Bitrix так же есть специальный метод, который позволяет разметить в нужные участки кода, и произвести тестовые замеры. Результаты времени выполнения можно будет вывести в файл, тем же методом dumpToFile():
Debug::startTimeLabel("catalogElements"); // запускаем начало фиксации времени // тут код, который следует замерить на время выполнения Debug::endTimeLabel("catalogElements"); // окончание фиксации времени Debug::dumpToFile(Debug::getTimeLabels()); // вывод данных в файл
Методу startTimeLabel() в нашем примере передаются имя метки (label), которые так же попадут в файл с результатами. Это позволяет использовать подобные замеры на протяжении всего выполнения скрипта, передавая разные имена меток. При отладке кода может оказаться весьма полезной функцией.
Посредством главного модуля в движке D7 так же можно пользоваться механизмом кэширования данных. Это позволит сократить время выполнения ресурсоёмких участков кода в проекте, которые обновляются не так часто. Так же главный модуль выполняет работу с пользователями, пользовательскими полями, а так же группами пользователей. Далее рекомендую ознакомиться с примерами работы с пользователями и пользовательскими полями.