Механизм плагинов

 
+
-
edit
 

Balancer

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

Отдельный пакет может быть "плагином". Плагин кидается в специальную папку
cms/plugins/path/to/any/name/

и в файле main.uri прописывается список URL, на которые он вешается.

Формат шаблона URI регексповый:
(/)(tools/search/title)(/.*)
Первые скобки - группа, указывающая на автоматического родителя нашего плагина. В данном случае, если родитель не будет прописан программистом явно, все ссылки вида /tools/search/title/... будут иметь в качестве родителя /.

Вторая группа - имя плагина.

Третья - внутренний путь плагина, на который вешаются обработчики его страниц и операций с ним.

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

Скажем, если я систему тикетов вешаю в /tickets/, то по
code php
  1. <?
  2.     hts_data_prehandler("!^({$GLOBALS['cms']['plugin_parent_uri']})\w+/?$!" ;, array(
  3.         'body' => 'plugins_tickets_main_body',
  4.         'title' => ec('Заказ'),
  5.     ));
  6. ?>

повешу свой обработчик на выдачу контента и заголовка (в рамках дефолтового шаблона) на любые /tickets/xxxx/

Дополняю своими возможностями готовый форум, скажем, punbb. И ставлю плагин на /forum/.
code php
  1. <?
  2.     hts_data_prehandler("!^(http://[^/]+{$GLOBALS['cms']['plugin_base_path']})t opic/\d+/(\d+)(,(\d+))?/?$!", array(
  3.         'title' => 'plugins_forum_unb_thread_title',
  4.         'nav_name' => 'plugins_forum_unb_thread_title',
  5.         'parent' => 'plugins_forum_unb_thread_parent',
  6.     ));

В результате для объекта с URI /forum/topic/445/23445,7/ будут возвращаться соответствующие данные.

Загрузка плагинов осуществляется только при показе ссылок, удовлетворяющих маскам в main.uri
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru