Начну понемногу описывать используемые в CMS механизмы. Очень поверхностно и вкратце, но надеюсь на уточняющие вопросы заинтересованных, буде таковые найдутся.
Отдельный пакет может быть "плагином". Плагин кидается в специальную папку
cms/plugins/path/to/any/name/ и в файле main.uri прописывается список URL, на которые он вешается.
Формат шаблона URI регексповый:
(/)(tools/search/title)(/.*) Первые скобки - группа, указывающая на автоматического родителя нашего плагина. В данном случае, если родитель не будет прописан программистом явно, все ссылки вида
/tools/search/title/... будут иметь в качестве родителя
/.
Вторая группа - имя плагина.
Третья - внутренний путь плагина, на который вешаются обработчики его страниц и операций с ним.
Ибо в коде самого плагина обработчики прописываются для путей, задаваемых относительно базового пути плагина.
Скажем, если я систему тикетов вешаю в
/tickets/, то по
<? hts_data_prehandler("!^({$GLOBALS['cms']['plugin_parent_uri']})\w+/?$!" ;, array( 'body' => 'plugins_tickets_main_body', 'title' => ec('Заказ'), )); ?>
повешу свой обработчик на выдачу контента и заголовка (в рамках дефолтового шаблона) на любые
/tickets/xxxx/ Дополняю своими возможностями готовый форум, скажем, punbb. И ставлю плагин на /forum/.
<? hts_data_prehandler("!^(http://[^/]+{$GLOBALS['cms']['plugin_base_path']})t opic/\d+/(\d+)(,(\d+))?/?$!", array( 'title' => 'plugins_forum_unb_thread_title', 'nav_name' => 'plugins_forum_unb_thread_title', 'parent' => 'plugins_forum_unb_thread_parent', ));
В результате для объекта с URI
/forum/topic/445/23445,7/ будут возвращаться соответствующие данные.
Загрузка плагинов осуществляется тольк…
Дальше »»»