Система плагинов
Эта документация описывает систему плагинов, реализованную в приложении.
Общая информация
Система плагинов позволяет расширять функциональность приложения без изменения его исходного кода. Плагины могут добавлять новые возможности, изменять поведение существующих функций и взаимодействовать с другими плагинами.
Структура плагина
Каждый плагин должен иметь следующую структуру:
plugins/
├── ИмяПлагина/
│ ├── plugin.properties # Файл свойств плагина (для нового способа)
│ ├── plugin.json # Файл конфигурации плагина
│ ├── plugin.php # Файл инициализации плагина (для старого способа)
│ └── src/ # Директория с исходным кодом плагина
│ └── ... # Классы плагина
Файл plugin.properties
Файл plugin.properties
содержит основные свойства плагина, включая имя главного класса:
mainClass=namespace\\ИмяГлавногоКласса
Главный класс плагина должен наследоваться от fs\AbstractPlugin
и реализовывать метод init()
.
Файл plugin.json
Файл plugin.json
содержит метаданные плагина:
{
"name": "ИмяПлагина",
"version": "1.0.0",
"description": "Описание плагина",
"author": "Автор плагина",
"requires": ["ЗависимыйПлагин1", "ЗависимыйПлагин2"],
"settings": {
"enabled": true,
"debug": false
}
}
Создание плагина (новый способ)
Создайте директорию для плагина в папке
plugins/
.Создайте файл
plugin.properties
с указанием главного класса.Создайте файл
plugin.json
с метаданными плагина.Создайте директорию
src/
для исходного кода плагина.Создайте главный класс плагина, наследующийся от
fs\AbstractPlugin
.
Пример главного класса плагина:
<?php
namespace MyPlugin;
use fs\AbstractPlugin;
class MyPlugin extends AbstractPlugin {
/**
* Инициализация плагина
*/
public function init() {
// Регистрируем хуки
$this->addHook('app.init', [$this, 'onAppInit']);
$this->addHook('app.shutdown', [$this, 'onAppShutdown']);
}
/**
* Обработчик события инициализации приложения
*/
public function onAppInit() {
echo "Плагин {$this->getName()} инициализирован!\n";
}
/**
* Обработчик события завершения работы приложения
*/
public function onAppShutdown() {
echo "Плагин {$this->getName()} завершает работу!\n";
}
}
Создание плагина (старый способ)
Создайте директорию для плагина в папке
plugins/
.Создайте файл
plugin.json
с метаданными плагина.Создайте файл
plugin.php
с функцией инициализации плагина.
Пример файла plugin.php
:
<?php
/**
* Функция инициализации плагина
*
* @param \fs\PluginManager $manager Менеджер плагинов
* @param string $pluginDir Директория плагина
* @return object Объект плагина
*/
function init_myplugin($manager, $pluginDir) {
// Создаем объект плагина
$plugin = new stdClass();
$plugin->name = 'MyPlugin';
$plugin->version = '1.0.0';
$plugin->description = 'Мой плагин';
$plugin->author = 'Автор';
// Регистрируем хуки
$manager->addHook('app.init', function() use ($plugin) {
echo "Плагин {$plugin->name} инициализирован!\n";
return true;
});
$manager->addHook('app.shutdown', function() use ($plugin) {
echo "Плагин {$plugin->name} завершает работу!\n";
return true;
});
return $plugin;
}
Хуки и фильтры
Система плагинов поддерживает хуки и фильтры для расширения функциональности:
Хуки
Хуки позволяют выполнять код в определенные моменты работы приложения:
// Регистрация хука
$this->addHook('hook.name', function($arg1, $arg2) {
// Код обработчика
return $result;
});
// Вызов хука
$result = $this->doHook('hook.name', [$arg1, $arg2]);
Фильтры
Фильтры позволяют изменять данные:
// Регистрация фильтра
$this->addHook('filter.name', function($value, $arg1, $arg2) {
// Изменяем значение
return $modifiedValue;
});
// Применение фильтра
$filteredValue = $this->applyFilter('filter.name', $value, [$arg1, $arg2]);
Зависимости плагинов
Плагины могут зависеть от других плагинов. Зависимости указываются в файле plugin.json
в поле requires
:
{
"requires": ["ЗависимыйПлагин1", "ЗависимыйПлагин2"]
}
Система плагинов автоматически загружает зависимости перед загрузкой плагина.
Настройки плагинов
Плагины могут иметь настройки, которые указываются в файле plugin.json
в поле settings
:
{
"settings": {
"enabled": true,
"debug": false
}
}
Настройки доступны через методы getSettings()
, getSetting()
и setSetting()
класса AbstractPlugin
.
Last updated