Эта глава представляет собой подробное руководство для разработчиков, создающих собственные функциональные модули для CMS Seditio. В ней рассматриваются файловая структура кастомного модуля, формат манифеста установки, интеграция в панель управления, механизм роутинга ЧПУ и разграничение прав доступа.
6.1. Структура каталогов и файлы кастомного модуля
Все модули Seditio физически размещаются в каталоге modules. Каждый модуль должен находиться в собственной папке, имя которой совпадает с системным кодом модуля (например, modules/gallery или modules/mymodule).
6.1.1. Соглашение об именах и файловая структура
Ниже представлена стандартная файловая структура модуля с именем mymodule:
modules/mymodule/
├── mymodule.php # Главный публичный контроллер (точка входа)
├── mymodule.setup.php # Манифест установки и конфигурация модуля
├── mymodule.install.php # Скрипт, выполняемый при установке модуля (опционально)
├── mymodule.uninstall.php # Скрипт, выполняемый при удалении модуля (опционально)
├── mymodule.urls.php # Правила ЧПУ роутинга модуля (входящие/исходящие)
├── admin/
│ ├── mymodule.admin.php # Панель управления модулем в админке (опционально)
│ └── mymodule.admin.menu.php # Кнопка меню в сайдбаре панели управления (опционально)
├── inc/
│ └── mymodule.functions.php # Дополнительные функции и API модуля (опционально)
├── lang/
│ ├── mymodule.en.lang.php # Английская локализация модуля
│ └── mymodule.ru.lang.php # Русская локализация модуля
└── tpl/
├── mymodule.tpl # Шаблон вывода публичной части
└── admin.mymodule.tpl # Шаблон вывода панели управления модуля
6.1.2. Публичный контроллер mymodule.php
Это главный файл модуля, который обрабатывает запросы посетителей. Вызов модуля осуществляется через фронт-контроллер Seditio: index.php?module=mymodule. Каждый исполняемый PHP-файл модуля в целях безопасности обязан начинаться с проверки константы SED_CODE:
if (!defined('SED_CODE')) {
die('Wrong URL.');
}
Контроллер отвечает за обработку входящих GET/POST параметров, работу с базой данных, подключение шаблонов через XTemplate и вывод результирующего контента в глобальную переменную $main:
$t = new XTemplate(sed_skinfile('mymodule', false, true));
// ... логика контроллера ...
$t->parse('MAIN');
$main .= $t->text('MAIN');
6.1.3. Административный раздел модуля
Если у модуля есть настройки или административные панели управления (задано Admin=1 в секции [BEGIN_SED_MODULE]), то:
- В панели управления по адресу
/admin/mymodule(илиindex.php?module=admin&m=mymoduleпри отключенном ЧПУ) ядро Seditio автоматически подключит контроллер admin/mymodule.admin.php (в качестве примера можно изучить структуру административного раздела модуля страниц). - Чтобы пункт управления модулем отобразился в левом сайдбаре панели управления, создается файл
admin/mymodule.admin.menu.php. В нем объявляется элемент меню:$adminmenu[] = array( 'code' => 'mymodule', 'title' => $L['My_Module_Title'], 'url' => sed_url('admin', 'm=mymodule'), 'icon' => 'folder' // Название SVG-иконки или класс иконки );
6.2. Файл манифеста и конфигурации {имя_модуля}.setup.php
Файл .setup.php (например, page.setup.php) содержит служебную информацию для инсталлятора Seditio. Он сообщает ядру, как зарегистрировать модуль в базе данных, какие создать права доступа по умолчанию и какие опции конфигурации добавить в панель управления.
Манифест состоит из трех основных блоков комментариев.
6.2.1. Метаданные файла ([BEGIN_SED])
Обычный блок с информацией о самом файле:
/* ==================== [BEGIN_SED] File=modules/mymodule/mymodule.setup.php Version=185 Updated=2026-feb-14 Type=Module Author=Developer Name Description=Custom Module for Seditio [END_SED] */
6.2.2. Параметры модуля ([BEGIN_SED_MODULE])
Содержит инструкции по интеграции модуля в систему разграничения прав и базу данных:
[BEGIN_SED_MODULE] Code=mymodule ; Уникальный текстовый код модуля Name=My Module ; Название модуля для админки Description=Handles custom tasks ; Описание модуля Version=1.0.0 ; Версия модуля Date=2026-feb-15 ; Дата выпуска Author=Developer ; Автор Copyright= ; Копирайт Notes= ; Важные заметки Requires= ; Список кодов других модулей/плагинов, нужных для работы Admin=1 ; 1 - есть панель управления в /admin/mymodule, 0 - нет Auth_guests=R ; Права гостей по умолчанию при установке (Read) Lock_guests=W12345A ; Запрещенные (заблокированные) права для гостей Auth_members=RW ; Права участников по умолчанию (Read + Write) Lock_members=12345A ; Запрещенные права для участников Lock_module=0 ; 1 - системный (нельзя удалить), 0 - обычный модуль [END_SED_MODULE]
6.2.3. Конфигурация модуля ([BEGIN_SED_MODULE_CONFIG])
Объявляет настройки модуля, которые будут доступны администратору в разделе настроек конфигурации по адресу /admin/config?n=edit&o=module&p=mymodule (или index.php?module=admin&m=config&n=edit&o=module&p=mymodule без ЧПУ). Каждая строка представляет собой переменную конфигурации в следующем формате: имя_переменной=порядок:тип:варианты:значение_по_умолчанию:описание
Пример:
[BEGIN_SED_MODULE_CONFIG] maxitems=01:select:5,10,15,20,25:10:Максимум элементов на страницу enable_custom=02:radio::1:Включить кастомные функции (1 - да, 0 - нет) api_key=03:string::default_key:Ключ API для интеграции intro_text=04:text::Приветствие:Текст в шапке модуля [END_SED_MODULE_CONFIG]
Типы полей конфигурации:
string— однострочное текстовое поле.select— выпадающий список (варианты перечисляются через запятую в третьем параметре).radio— переключатель Да/Нет (1/0).text— многострочное поле ввода (textarea).custom— поле со сложным вводом, управляемое кастомной функцией.
Все объявленные опции автоматически записываются в таблицу sed_config и доступны в коде через глобальный массив $cfg['plugin']['mymodule']['имя_переменной'] (для плагинов) или $cfg['mymodule']['имя_переменной'] (для модулей).
6.3. Инсталляционные скрипты модуля
При установке или удалении модуля администратором ядро выполняет дополнительные действия, если в каталоге модуля присутствуют файлы инсталляции.
6.3.1. Установка модуля (mymodule.install.php)
Скрипт запускается автоматически сразу после регистрации модуля в таблице sed_auth и записи настроек конфигурации. Обычно он используется для создания кастомных таблиц модуля в базе данных:
<?php
if (!defined('SED_CODE') || !defined('SED_ADMIN')) { die('Wrong URL.'); }
// Создание таблицы модуля
$db_my_table = $cfg['sqldbprefix'] . 'my_table';
$sql = sed_sql_query("CREATE TABLE IF NOT EXISTS $db_my_table (
item_id int(11) NOT NULL auto_increment,
item_title varchar(255) NOT NULL default '',
item_date int(11) NOT NULL default '0',
PRIMARY KEY (item_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;");
Также здесь можно выполнять любые системные действия (например, проверку версии PHP, создание папок кэша в /datas/ и установку прав chmod).
6.3.2. Удаление модуля (mymodule.uninstall.php)
Запускается при удалении модуля из панели управления. Его основная задача — корректно очистить базу данных от кастомных таблиц и полей, созданных модулем, чтобы не оставлять «мусора» в СУБД:
<?php
if (!defined('SED_CODE') || !defined('SED_ADMIN')) { die('Wrong URL.'); }
$db_my_table = $cfg['sqldbprefix'] . 'my_table';
sed_sql_query("DROP TABLE IF EXISTS $db_my_table;");
Удаление записей из таблиц sed_config и sed_auth ядро Seditio производит автоматически по коду модуля.
6.4. Разработка правил ЧПУ для модуля {имя_модуля}.urls.php
Для того чтобы модуль поддерживал красивые ЧПУ (дружественные URL), разработчик должен предоставить правила роутинга в файле {имя_модуля}.urls.php. Образец таких правил можно изучить в файле ЧПУ страниц page.urls.php.
Файл должен возвращать значение приоритета и правила преобразования.
6.4.1. Приоритет разбора ЧПУ ($mod_urlrewrite_order)
Эта переменная задает вес/очередность выполнения правил регулярных выражений данного модуля. Чем меньше число, тем раньше правила будут обработаны парсером ЧПУ:
$mod_urlrewrite_order = 500;
6.4.2. Входящие роуты ($mod_urlrewrite)
Массив $mod_urlrewrite содержит правила сопоставления URL, введенных пользователем в адресную строку браузера, с внутренними параметрами скрипта:
$mod_urlrewrite = array(
// Пример ЧПУ: /mymodule/125/view
array(
'order' => 500,
'cond' => '#^/mymodule/([0-9]+)/view(/?)$#',
'rule' => 'modules/mymodule/mymodule.php?id=$1&action=view'
),
// Пример ЧПУ: /mymodule/category-name/
array(
'order' => 510,
'cond' => '#^/mymodule/([a-zA-Z0-9_-]+)/$#',
'rule' => 'modules/mymodule/mymodule.php?cat=$1'
)
);
cond— регулярное выражение для сопоставления ЧПУ-адреса.rule— внутренний адрес запроса Seditio, на который будет негласно перенаправлен посетитель.
6.4.3. Исходящие ссылки ($mod_urltrans)
Массив $mod_urltrans описывает, как функция генерации адресов sed_url() должна собирать ЧПУ-ссылки при выводе их в шаблонах:
$mod_urltrans = array();
$mod_urltrans['mymodule'] = array(
// Преобразует sed_url('mymodule', 'id=125&action=view') в /mymodule/125/view
array(
'params' => 'id=*&action=*',
'rewrite' => 'mymodule/{id}/{action}'
),
// Преобразует sed_url('mymodule', 'cat=sports') в /mymodule/sports/
array(
'params' => 'cat=*',
'rewrite' => 'mymodule/{cat}/'
)
);
6.5. Проверка прав доступа (ACL) в коде модуля
Разграничение прав доступа для модуля строится на стандартной битовой маске ACL Seditio.
6.5.1. Регистрация прав модуля
При инсталляции модуля ядро проверяет поля Auth_guests и Auth_members в файле setup.php и автоматически создает строки прав для всех существующих групп пользователей в таблице sed_auth. Код области доступа (auth_code) будет соответствовать системному коду модуля (в нашем примере mymodule).
6.5.2. Проверка прав в PHP-коде
Для разграничения доступа к функциям модуля разработчик должен вызвать системную функцию sed_auth():
// Получаем права текущего пользователя на модуль 'mymodule'
// Второй параметр 'a' указывает на базовую секцию модуля
list($usr['auth_read'], $usr['auth_write'], $usr['isadmin']) = sed_auth('mymodule', 'a');
Полученные переменные используются для блокировки несанкционированных действий:
// Полная блокировка страницы, если у пользователя нет прав на чтение (Read)
sed_block($usr['auth_read']);
// Запрет отправки формы, если нет прав на запись (Write)
if ($action == 'save' && !$usr['auth_write']) {
sed_redirect(sed_url('mymodule', '', '', true));
exit;
}
// Показ административных ссылок модераторам
if ($usr['isadmin']) {
$t->assign("ADMIN_ACTIONS_URL", sed_url('admin', 'm=mymodule'));
$t->parse("MAIN.ADMIN_ZONE");
}
Благодаря этой схеме модуль полностью интегрируется в глобальную систему безопасности Seditio и позволяет администратору гибко настраивать доступы через панель управления группами.
Комментарии: (0)