Как сделать плагин-подобное веб-приложение с PHP?

Переполнение стека!

Я ищу способ сделать похожее на плагин (я не знал, как это назвать) веб-приложение с помощью PHP. Под этим я подразумевал, что хочу создать систему, в которой пользователь может добавлять / удалять плагины (расширения, если хотите) через браузер (не добавляя некоторый код в конфигурацию). Хороший пример - WordPress, на мой взгляд. Конечный пользователь может просто установить любые плагины и, практически ничего не делая, они работают как положено, и очень часто имеют множество настроек для изменения и так далее.

Кроме того, я хотел бы сделать его максимально удобным для использования. При этом я имел в виду, что плагин может использовать части других плагинов, чтобы было меньше переписанного кода. Например, есть плагин для авторизации / аутентификации и все остальное, что связано с пользователями. Затем есть плагин, который предназначен для блога. Блог, конечно же, нуждается в упоминании, верно? Так что он просто использует этот плагин для работы. Я понимаю, что будет много зависимостей и так далее... но это просто нормально.:)

У меня вопрос... с какой техникой я могу это сделать? Каковы преимущества и недостатки такой системы? Я предполагаю, что это будет немного медленнее и не подойдет для очень больших сайтов, таких как Facebook (хорошо, это просто слишком много), но для простых блогов, портфолио, что бы это ни было просто замечательно!

Я слышал о программировании, управляемом событиями (или программировании, основанном на событиях), и я прочитал статью об этом в Википедии, но все же... Я очень смущен и, даже более того, не уверен, что это то, что я находясь в поиске.

Спасибо, что прочитали это. Дайте мне несколько ответов, если это возможно.:D

2 ответа

Решение

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

При всех своих недостатках Wordpress имеет вполне работоспособный подход к этому. Он использует "крючки" для взаимодействия с плагинами. По сути, это система обратного вызова, которая более или менее может быть "управляемой событиями". Принципиально основное приложение делает что-то вроде:

foreach ($callback["need_to_render_sidebar"] as $fn) {
    $fn();
}

Но вы можете сделать его более гибким, передавая дополнительные параметры, возвращая данные и, что более важно, используя объекты, а не процедурные обратные вызовы для более сложных функций. (Я бы предпочел смешивать и сопоставлять. Не существует единого подхода, подходящего для всех приложений или расширений.)

Аналогично, система плагинов часто позволяет самим расширениям вызывать основное приложение, вводить в него данные или изменять настройки.

Вторая часть, которую вы должны рассмотреть для системы плагинов, это то, как вы делаете ее управляемой. Там в основном каждая WebCMS/DMS имеет свой подход. Многие используют zip-файлы для извлечения вручную или каталоги модулей. Для начала наиболее подходящим является WP-подобный подход к файлам сценариев с расширенными метаданными. Я создал аналогичную систему, которую можно использовать независимо от WP, хотя она довольно грубая: http://milki.include-once.org/genericplugins/ (приятная часть - это управляемость настроек).

Просто простая концепция.

Вы можете использовать расширения как классы PHP и хранить их в отдельных файлах в одной (или нескольких) директории (-ies). Вы должны инициализировать расширения в основном приложении, просматривая файлы расширений и создавая объекты этих классов.

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

Другие вопросы по тегам