Структура модуля
Создание модуля начинается со структуры. Сначала нам необходимо придумать нашему модулю имя.
Имя модуля должно начинаться с префикса mod_ В примере будем использовать mod_hello_prologue
Поехали!
Создадим папку /pr/modules/mod_hello_prologue/
Теперь нам необходимо создать обязательные файлы:
- /pr/modules/mod_hello_prologue/mod_init.php - файл для инициализации модуля
- /pr/modules/mod_hello_prologue/mod_description.php - файл для описания модуля
- /pr/modules/mod_hello_prologue/mod_adapter.php - адаптер
- /pr/modules/mod_hello_prologue/mod_controller.php - контроллер модуля
mod_init.php
Файл служит установщиком модуля. В данном файле создаются записи на права доступа к модулю и строится вся его инфраструктура.
Подробнее про права доступа: Уровни доступа
Пример:
defined('PROLOGUE__FRAMEWORK') or die ;
/* Права доступа */
PrAccess::add_level_access('Доступ к модулю Hello Prologue (чтение)', 'mod_hello_prologue_READ', '4000');
PrAccess::add_level_access('Доступ к модулю Hello Prologue (запись)', 'mod_hello_prologue_RECORD', '4100');
PrAccess::add_level_access('Доступ к модулю Hello Prologue (полный)', 'mod_hello_prologue_ALL', '4200');
mod_description.php
Данный файл является паспортом модуля. Он отвечает за представление модуля в списке модулей.
Пример:
defined('PROLOGUE__FRAMEWORK') or die ;
if (PrAccess::get_access('mod_hello_prologue_READ')) {
return array(
'name' => 'Hello Prologue',
'description' => 'Обучающий модуль Hello Prologue',
'icon-class' => 'fa fa-graduation-cap',
);
}
name - Название модуля
description - Описание модуля
icon-class - это css класс иконки модуля, подобрать иконку можно тут https://fontawesome.com/icons
mod_adapter.php
Файл который адаптирует функционал мдуля в различные места ядра. С помощью этого файла можно вносить любые изменения в систему.
Список доступных адаптов тут.
Пример:
defined('PROLOGUE__FRAMEWORK') or die ;
/*
* Адаптер обеспечивает подключение модуля к некоторым ключевым компонентам ядра
*
*/
switch ($fileAdapt) {
case '/Project/core/prologue.php' :
// code
break;
case '/Project/views/render.php' :
// use $html - весь html страницы
break;
}
mod_controller.php
Контроллер админ части модуля.
Пример:
defined('PROLOGUE__FRAMEWORK') or die ;
Class ModController extends PrController {
public function index() {
if (!PrAccess::get_access('mod_hello_prologue_READ')) {
$this -> error(403);
}
$this -> component('admin/init');
$this -> css('/pr/modules/mod_hello_prologue/static/css/style.css');
$this -> js('/pr/modules/mod_hello_prologue/static/js/script.js');
$this -> lang('mod_hello_prologue');
$this -> init([]);
$this -> view -> display('/pr/modules/mod_hello_prologue/view/main');
}
}
Директории модуля
Необходимо создать следующие папки:
- components - компоненты модуля
- incl - классы модуля
- lang - языковые директории и файлы локали
- models - модели модуля
- static - статика. Изображения, css, js и т.д.
- view - Представление модуля