У меня есть инструмент управления плагинами, но я использовал его только с преимущественно процедурными плагинами и со всеми включениями, обычно загружаемыми сразу.Но для основанного на событиях и API с отложенной загрузкой я мог бы представить использование поверхностных оболочек для управления плагином и использование автозагрузки для реальных расширений.
<?php
/**
* api: whatever
* version: 0.1
* title: plugin example
* description: ...
* config: <var name="cfg[pretty]" type="boolean" ...>
* depends: otherplugin
*/
$plugins["title_event"] = "TitleEventClass";
$plugins["secondary"] = array("Class2", "callback");
?>
В этом примере я бы предположил, что API плагинапростой список.Этот пример сценария feature-plugin-123.php
не будет делать ничего, кроме добавления в массив при загрузке.Таким образом, даже если у вас есть дюжина функциональных плагинов, это потребует дополнительных include_once
каждого.
Но API основного приложения / или плагина может вместо этого просто создавать экземпляры упомянутых классов (либо new $eventcb;
для необработанногоимена классов или call_user_func_array
для обратных вызовов).Где, в свою очередь, это выгрузит актуальную задачу в автозагрузчик.Таким образом, у вас есть двойная система, где одна часть управляет списком, а другая находит реальный код.
Таким образом, я все еще воображаю простой config.php
, который просто перечисляет плагины и настройки, подобные этому:
<?php
include_once("user/feature-plugin-123.php");
include_once("user/otherplugin2.php");
include_once("user/wrapper-for-htmlpurifier.php");
$cfg["pretty"] = 1;
Опять же, учитывая, что это всего лишь сценарии оболочки / данных, с описанием плагина для удобства управления.Можно также использовать фактический register_even()
API и определить дополнительную функцию-оболочку в каждом.Но перечисление имен классов кажется самым простым вариантом.
Вышеупомянутый инструмент управления выглядит немного ржавым и уродливым: http://milki.include -once.org / genericplugins /
Но он не нужен, если вы простонужен список (таблица sql) и нет управления настройками.Эти накладные расходы предназначены только для красивой распечатки метаданных плагина и обеспечения удобочитаемости config.php
.
В заключение:
spl_autoload()
на include_path и простой реестр событий -> classnameпо одному сценарию-обертке, просто включенному сразу.