Типы плагинов
- Standalone — Автономные плагины с собственными URL
- Hook — Плагины, использующие хуки для расширения функционала
- AJAX — Плагины для AJAX-запросов
Структура плагина
plugins/pluginname/
├── pluginname.php # Главный файл (для standalone)
├── pluginname.setup.php # Файл конфигурации
├── pluginname.install.php # Файл установки
├── pluginname.uninstall.php # Файл деинсталляции
├── pluginname.tpl # Шаблон (опционально)
├── lang/ # Языковые файлы
│ ├── pluginname.en.lang.php
│ ├── pluginname.ru.lang.php
│ └── ...
└── inc/ # Дополнительные файлы (опционально)
Файл setup (pluginname.setup.php)
Содержит метаданные плагина в формате:
[BEGIN_SED_EXTPLUGIN]
Code=pluginname # Код плагина
Name=Plugin Name # Название
Description=Description # Описание
Version=1.0 # Версия
Date=2025-01-01 # Дата
Author=Author Name # Автор
Copyright=Copyright # Копирайт
SQL= # SQL для установки (опционально)
Auth_guests=0 # Права для гостей
Lock_guests=RW12345A # Блокировки для гостей
Auth_members=R # Права для членов
Lock_members=W12345A # Блокировки для членов
[END_SED_EXTPLUGIN]
[BEGIN_SED_EXTPLUGIN_CONFIG]
param_name=01:type:values:default:Description
[END_SED_EXTPLUGIN_CONFIG]
Загрузка плагина
Standalone плагин:
http://site.com/?module=plug&e=pluginnameили http://site.com/plug/pluginname
AJAX плагин:
http://site.com/?module=plug&ajx=pluginname
или
http://site.com/plug/?ajx=pluginname
Хуки плагинов
Плагины могут подключаться к различным хукам:
- global — Глобальный хук (загружается на всех страницах)
- ajax — Ajax хук
- common — Общий хук в common.php
- header.first — Перед header.php
- footer.first — Перед footer.php
- index.first, index.main, index.tags — Хуки для главной страницы
- И множество других специфичных хуков для каждого модуля
Пример использования хука
// Получение списка плагинов для хука
$extp = sed_getextplugins('index.tags');
// Проверка наличия хуков
if (is_array($extp)) {
// Перебор всех плагинов, подключенных к хуку
foreach ($extp as $k => $pl) {
// Включение файла хука плагина
include(SED_ROOT . '/plugins/' . $pl['pl_code'] . '/' . $pl['pl_file'] . '.php');
}
}
Структура данных хука
Каждый элемент массива $extp содержит:
$pl = array(
'pl_id' => 1, // ID хука в БД
'pl_code' => 'myplugin', // Код плагина
'pl_title' => 'My Plugin', // Название плагина
'pl_file' => 'myplugin.index.tags', // Имя файла хука (без расширения .php)
'pl_hook' => 'index.tags', // Имя хука
'pl_order' => 10, // Порядок выполнения (меньше = раньше)
'pl_active' => 1, // Активность (1 = активен, 0 = отключен)
'pl_module' => '', // Модуль (если применимо)
);
Практические примеры использования хуков
Пример 1: Добавление переменных в шаблон через хук
Файл плагина: plugins/myplugin/myplugin.index.tags.php
// Добавляем переменные для шаблона
$t->assign(array(
"MYPLUGIN_TITLE" => "Мой плагин активен",
"MYPLUGIN_CONTENT" => "Дополнительный контент от плагина",
));
// Модифицируем существующие переменные
$current_subtitle = $t->get("SUBTITLE");
$t->assign("SUBTITLE", $current_subtitle . " | Модифицировано плагином");
Пример 2: Изменение данных через хук
Файл: plugins/myplugin/myplugin.page.first.php
// Изменяем параметры запроса страницы
if (isset($id) && $id > 0) {
// Добавляем дополнительную проверку
$sql = sed_sql_query("SELECT * FROM $db_pages WHERE page_id='$id'");
if ($row = sed_sql_fetchassoc($sql)) {
// Модифицируем данные перед использованием в модуле
$row['page_text'] = str_replace('старый текст', 'новый текст', $row['page_text']);
$t->assign("PAGE_TEXT_MODIFIED", $row['page_text']);
}
}
Пример 3: Добавление контента через хук
Файл: plugins/myplugin/myplugin.header.tags.php
// Добавляем CSS файл плагина
$morecss .= '<link rel="stylesheet" href="' . $cfg['mainurl'] . '/plugins/myplugin/myplugin.css">';
// Добавляем JavaScript
$morejavascript .= '<script src="' . $cfg['mainurl'] . '/plugins/myplugin/myplugin.js"></script>';
// Добавляем мета-теги
$moremetas .= '<meta name="myplugin-version" content="1.0">';
Регистрация хуков
Хуки регистрируются в таблице sed_plugins. Регистрация может происходить:
- Автоматически — при установке плагина через админ-панель
- Вручную — через SQL запросы
Структура таблицы sed_plugins
CREATE TABLE sed_plugins (
pl_id INT NOT NULL AUTO_INCREMENT,
pl_code VARCHAR(32) NOT NULL, -- Код плагина
pl_title VARCHAR(255) NOT NULL, -- Название
pl_file VARCHAR(255) NOT NULL, -- Имя файла хука (без .php)
pl_hook VARCHAR(255) NOT NULL, -- Имя хука
pl_order INT DEFAULT 0, -- Порядок выполнения
pl_active TINYINT DEFAULT 1, -- Активность (1/0)
pl_module VARCHAR(32) DEFAULT '', -- Модуль (если применимо)
PRIMARY KEY (pl_id),
INDEX (pl_hook, pl_active, pl_order)
);
Регистрация хука вручную
// Пример регистрации хука при установке плагина
$sql = sed_sql_query("
INSERT INTO $db_plugins
(pl_code, pl_title, pl_file, pl_hook, pl_order, pl_active)
VALUES
('myplugin', 'My Plugin', 'myplugin.index.tags', 'index.tags', 10, 1)
");
Порядок выполнения хуков
Хуки выполняются в порядке значения pl_order (по возрастанию):
// Хук с pl_order = 5 выполнится раньше чем с pl_order = 10
$sql = sed_sql_query("SELECT * FROM $db_plugins WHERE pl_hook='index.tags' ORDER BY pl_order ASC");
⚠️ Важно: Порядок выполнения хуков критичен. Если один плагин зависит от другого, установите правильные значения pl_order.
0
Пока комментариев нет

Комментарии: (0)