2010-06-18 4 views
2

Мне было предложено создать проект, в котором клиент может создавать плагины PHP и добавлять их на сайт ... такое же понятие, как плагины WordPress.Как создать проект, поддерживающий плагины

Каков наилучший способ сделать программное обеспечение, которое поддерживает это? Я не прошу разрешения, я прошу концепцию или структуру.

+0

(* ссылка *) [Wikipedia on Plugin Architecture] (http://en.wikipedia.org/wiki/Plug-in_%28computing%29) – Gordon

+0

* (ссылка) * [API-интерфейс для Wordpress Plugin API] (http: /codex.wordpress.org/Plugin_API) – Gordon

+0

@ Гордон благодарит моего друга, я уже читал об этом. но я ищу концепцию php для этого. как мне это сделать с помощью PHP – trrrrrrm

ответ

1

Прежде всего, вам нужно определить, как вы хотите интегрировать свои плагины. Если вы хотите что-то вроде плагинов Wordpress, которые в большинстве случаев являются просто функциями, то это очень просто. Это похоже на добавление нового кода в ваше приложение.

Ну, в основном, ваше приложение должно иметь возможность создавать список доступных плагинов и определять, какие из них включены. Список можно создать, просмотрев файлы, файл конфигурации или что угодно. Включенные плагины могут быть сохранены в базе данных, например.

Затем вы просто выполняете интерфейс, в котором пользователь может включить каждый доступный плагин. При его включении веб-приложение будет записывать информацию об этом в базу данных плагинов, указав, что оно включено. Затем приложение вызывает конкретный метод класса плагина (действительно, ООП является обязательным в правильной разработке плагинов), например Install(). Чтобы избежать исключений, когда плагины не имеют такого метода, все классы плагина должны наследовать базовый класс, написанный в основном веб-приложении, который содержит определение для этого метода. Этот метод имеет единственную цель для выполнения инициализации плагина (создание таблиц в базе данных, заполнение статистики и т. Д.).

Кроме того, при каждом запросе ваше веб-приложение должно включать в себя все файлы плагинов, которые указаны как разрешенные. Затем используйте их, как хотите. Например, вызовите их методы из шаблонов. Если вы хотите написать плагины, прозрачные для разработчика шаблонов, то вы можете сделать это как в wordpress. Там плагин при инициализации (например, когда он включен в файл) записывает конкретные данные в массивы действий. Он может написать, какую функцию следует вызывать, с какими параметрами и когда нужно вызывать. Вы даже можете сделать что-то вроде триггеров событий в своем основном веб-приложении, чтобы включить настройку. Прежде чем рисовать что-нибудь, вызовите функцию, называемую как do_action("before_output_of_something"), и после завершения вывода вызовите функцию do_action("after_output_of_something"). Строковый параметр будет ключом в массиве триггеров, который указывает на массив действий (обработчики событий). Чтобы добавить обработчики событий, вызовите функцию типа add_action("before_output_of_something", $object, "method_name", array("parameters")). Метод do_action передает массив действий и использует функцию call_user_func() PHP для вызова обработчиков событий.

В этой теме гораздо больше. Все зависит от того, что именно вы хотите сделать. То, что я написали здесь, - это просто отвратительная попытка выразить некоторые из возможностей. То, что вы должны сделать, это найти хорошую книгу, возможно, только в этой теме.

0

Существует несколько вариантов. Наиболее распространенной является концепция hooks с простыми функциями плагина, где вам просто нужно включить() плагин из центрального сценария конфигурации. Каждый плагин должен регистрироваться, поэтому обычно существует способ регистрации плагина. Но она также может просто выглядеть следующим образом:

$app_plugin["add_title"][] = "do_whatever"; 
function do_whatever($request, &$page) {...} 

И в главном приложении вы просто определить пару плагинов звонков, где бы вы видите необходимость в нем. Вы должны использовать функцию-оболочку для вызова всех плагин, но в основном вы посмотрите на имя крючков и вызывать все зарегистрированные плагин:

foreach ($app_plugin["add_title"] as $func) { 
    $output .= $func($_REQUEST, $page); 

Каждый именованный крюк может иметь различный набор параметров. Обычно вы хотите получить дополнительный контент, но иногда плагины просто изменяют существующие переменные или влияют на поток приложения.

Чем больше крючков у вас есть, тем более разнообразны расширения. И нет необходимости использовать только функции. Конечно, эта схема также работает с объектами (их нужно просто создать вначале.)

1

Я бы решил это, используя шаблон event-dispatcher. Вы определяете определенные моменты (события) в своем основном приложении. Плагины могут регистрироваться для этих событий и будут выполняться, когда инициируется связанное событие.

+0

Например, [Диспетчер событий Symfony Components] (http://components.symfony-project.org/event-dispatcher/) или [Диспетчер событий PEAR] (http://pear.php.net/package/Event_Dispatcher/перенаправлено) – Gordon

+0

Да, я думаю, для этого есть много решений. Поскольку Event-Dispatcher не имеет большого значения, я бы сам его кодировал, чтобы соответствовать моим потребностям –

Смежные вопросы