Модули

Механизм модульности фреймворка, позволяет создавать модули для приложения, которые являются самодостаточными архитектурными единицами, со своими программными файлами и интерфейсами (шаблоны, 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);

 

 

Порядок загрузки модуля

  1. deps.php - скрипт для подключения зависимостей. Здесь подключаются файлы, которые могут понадобиться файлам подключаемым в structure.php
  2. structure.php - перечень подключаемых файлов (PHP-скриптов). Все файлы перечисленные здесь, подключаются через require_once().
  3. 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  

 

Переопределение отдельных файлов модуля

 

Как создать модуль

 

© Автор и разработчик Михаил Шершнёв, 2006–2021
E-mail: support@bwframework.ru