Xpoint
   [напомнить пароль]

Архитектура подключения плагинов (plug-in) для CMS

Метки: [без меток]
2007-12-04 14:55:38 [обр] wiktar(1/20)[досье]

Добрый день!

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

Попробовал набросать некоторые заметки о требованиях к такой архитектуре.

  1. Плагины должны операться на API и не зависеть от обновлений ядра движка в пределах мажорной версии.
  2. Плагины могут иметь свой собственный внешний вид (например, шаблон для генерации своего вывода) и в то же время, не должен навязывать внешний вид общей темы сайта.
  3. У плагинов должен быть свой интерфейс конфигурации. Он должен каким-то образом встраиваиться в панель управления сайтом.

Примером таких плагинов я считаю плагин sitemap, RSS, Atom, robots.txt. То есть, всё это можно вынести из ядра движка, возложив на плагины.

Как им работать?
По запросу example.com/feed/atom/ движок включает плагин atom, который уже по своему усмотрению выдаёт XML. Его личное дело, кешировать ли вывод или генерировать каждый раз наново.
По запросу example.com/robots.txt в работу включается соотвествующий плагин. И так далее.

Но вот как подобную архитектуру реализовать?

Пока в голову пришёл механизм callback-ов. То есть, при установке, плагин регистрируется в системе. Сообщает своё имя и действие после которого ему следует выполниться. Например, после публикации нового материала на сайте.

Движок же вызывает список всех зарегистрированных плагинов и передаёт им объект, с которым они будут работать.

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

Такие вот мысли.

Подскажите, пожалуйста, в чём я возможно заблуждаюсь и укажите откровенные ляпы? А так же, может быть есть какие-то готовые паттерны подобного рода?

Спасибо!

спустя 20 часов [обр] Дмитрий Симонов[досье]

у Тебя CMS-ка вообще оперирует событиями?

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

спустя 11 часов [обр] wiktar(1/20)[досье]

Что это значит "оперирует событиями"?

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

А уже по событиям вызывать зарегистрированные плагины.

Powered by POEM™ Engine Copyright © 2002-2005