Типы плагинов

  1. Standalone — Автономные плагины с собственными URL
  2. Hook — Плагины, использующие хуки для расширения функционала
  3. 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. Регистрация может происходить:

  1. Автоматически — при установке плагина через админ-панель
  2. Вручную — через 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.

Оценка:

Средняя оценка (от 1 до 10): Пока не оценено   
Опрошено: 0
Только зарегистрированные пользователи могут участвовать в голосовании.
Пока комментариев нет