Модули
Механизм модульности фреймворка, позволяет создавать модули для приложения, которые являются самодостаточными архитектурными единицами, со своими программными файлами и интерфейсами (шаблоны, css, js и т.п.). Модуль может иметь или не иметь, инсталлятор и деинсталлятор, таким образом модуль обладает свойством для дистрибуции, то есть возможностью переносить модуль в другие проекты.
Подключение модуля
// Модуль текущего приложения, с вариантом загрузки по умолчанию.
app::load_module('my_module');
// Модуль из текущего приложения, с вариантом загрузки "light".
app::load_module('my_module', 'site1', 'light');
// Модуль из текущего приложения, с вариантом загрузки "my_variant".
app::load_module('my_module', 'site1', 'my_variant');
// Модуль из другого приложения.
app::load_module('other_module', 'site2');
// Модуль из ядра.
app::load_module('system', 'kernel');
Объект модуля
Объект модуля предназначен для выдачи информации по соответствующему модулю.
С помощью объекта модуля можно получить абсолютный путь и URL к директории модуля.
Получить объект модуля можно с помощью метода app::get_module(), при этом модуль не загружается (см. порядок загрузки модуля). Данный метод можно вызывать столько раз, сколько необходимо программисту, без переживания о потребляемых из-за этого ресурсов, так как объект модуля создаётся только один раз и сохраняется в app::$modules (статическое защищённое свойство).
Примеры:
// Получить объект модуля установленного в текущем приложении.
$module = app::get_module('my_module_name');
// Получить объект модуля из указанного приложения.
$module2 = app::get_module('my_module_name2', 'my_application_name');
// Получить URL к директории модуля.
// Метод вернёт "/internals/modules/my_module_name/".
echo $module->get_url();
// Также есть возможноть получить адрес с хостом.
// Хост именно того приложения, к которому относиться модуль.
// Метод вернёт "https://site.ru/internals/modules/my_module_name/".
echo $module->get_url(true);
// Получить абсолютный путь к директории модуля.
// Метод вернёт "/var/www/site.ru/internals/modules/my_module_name/".
echo $module->get_dir();
// Получить относительный путь от document root к директории модуля.
// Метод вернёт "internals/modules/my_module_name".
echo $module->get_dir(true);
Порядок загрузки модуля
- deps.php - скрипт для подключения зависимостей. Здесь подключаются файлы, которые могут понадобиться файлам подключаемым в structure.php
- structure.php - перечень подключаемых файлов (PHP-скриптов). Все файлы перечисленные здесь, подключаются через require_once().
- init.php - место для подключения скриптов (JS) и стилей (CSS) модуля, а также для любых инициализационных действий.
Варианты загрузки модуля
Состояние или вариант загрузки модулей — это механизм используемый при оптимизации производительности приложения.
Например, в состав модуля входит 100 подключаемых скриптов с классами и функциями, но для какой-то определённой задачи, необходимо подключить всего 10 скриптов из состава модуля. В таком случае можно создать облегчённый вариант загрузки и дать ему название "light".
// Загрузить модуль в состоянии по умолчанию.
app::load_module('my_module', 'my_application');
// Загрузить модуль по варианту "light".
app::load_module('my_module', 'my_application', 'light');
Для первого случая, то есть варианта по умолчанию, будут исполнены скрипты:
/internals/modules/my_module/.metadata/deps.php
/internals/modules/my_module/.metadata/structure.php
/internals/modules/my_module/.metadata/init.php
Для второго случая, будут исполнены скрипты:
/internals/modules/my_module/.metadata/deps.light.php
/internals/modules/my_module/.metadata/structure.light.php
/internals/modules/my_module/.metadata/init.light.php
Файловая структура модуля
Файл/Директория | Назначение |
---|---|
.metadata/module.php или .metadata/description.php |
Самый главный файл в метаданных модуля. Именно он является признаком того, что модуль - это модуль. |
.metadata/structure.php | |
.metadata/init.php | |
.metadata/files.php | |
.metadata/deps.php | |
.metadata/database.php | |
.metadata/routes.php | |
.metadata/config.php | |
.metadata/install.php | |
.metadata/uninstall.php | |
.metadata/settings.php | |
.metadata/rights.php | |
.metadata/options.php | |
interface/css/ | |
interface/fonts/ | |
interface/images/ | |
interface/js/ | |
interface/templates/ | |
dictionaries/ru/ | |
dictionaries/en/ | |
install/ | |
blocks/ | |
controllers/ | |
pages/ | |
services/ | |
forms/ | |
classes/ | |
functions.php |
Переопределение отдельных файлов модуля
Как создать модуль