Плагин в Template CMS - это скрипт расширяющий базовые возможности CMS. При создании плагина необходимо использовать Template CMS Plugin API. Документацию по функциям Template CMS Plugin API можно найти в мануле.
Опишу как выглядит и из чего состоит плагин для Template CMS на примере плагина sandbox/песочница. Этот плагин полезен для ознакомлением с Template CMS Plugin API. Собственно это каркас разработки плагинов для Template CMS. Структура плагина обычно имеет такой вид:

В папке /templates/ необходимо размещать шаблоны плагина. Шаблоны для клиентской части размещать в /templates/frontend/, а для админки размещать в /templates/backend/. Именование папок, файлов и оформление исходного кода необходимо придерживаться правил изложенных в этой статье.
Исключением являются лишь языковые файлы плагина, который имеет вид Название плагина-язык-Lang.php. Пример:

Плагин должен обязательно иметь русскую и английскую локализацию.
В папке /install/ у каждого плагина должен находится его установочный файл в формате XML. Называться должен также как и главный файл плагина с расширением *.php : SandboxPlugin.php
Установочный файл /install/SandboxPlugin.xml содержит в себе следующие:
<?xml version="1.0" encoding="UTF-8"?>
<item>
<plugin_location>plugins/sandbox/SandboxPlugin.php</plugin_location>
<plugin_frontend>no</plugin_frontend>
<plugin_backend>yes</plugin_backend>
<plugin_status>active</plugin_status>
<plugin_priority>15</plugin_priority>
<plugin_name>Sandbox</plugin_name>
<plugin_description>Sandbox plugin</plugin_description>
<plugin_version>1.0</plugin_version>
<plugin_author>Athor</plugin_author>
<plugin_author_uri>http://mysite.ru/</plugin_author_uri>
</item>
Путь к плагину
<plugin_location>plugins/sandbox/SandboxPlugin.php</plugin_location>
Где включать этот плагин: фронтенд, бекенд.
<plugin_frontend>no</plugin_frontend>
<plugin_backend>yes</plugin_backend>
Состояние плагина active/off
<plugin_status>active</plugin_status>
Приоритет плагина перед остальными плагинами в системе.
Важно: цифра приоритета ваших плагинов должна начинаться с 11 и выше. Приоритет до 11 для плагинов из коробки/box.
<plugin_priority>15</plugin_priority>
Рассмотрим главный файл плагина SandboxPlugin.php
Каждый плагин начинается с заголовка в формате phpDocumentor
/**
* Sandbox plugin
* @package TemplateCMS
* @subpackage Plugins
* @author Romanenko Sergey / Awilum
* @copyright 2011 Romanenko Sergey / Awilum
* @version 1.0
*
*/
Плагин необходимо зарегистрировать в системе вот так:
// Register plugin
registerPlugin(getPluginId(__FILE__),
getPluginFilename(__FILE__),
'Sandbox', // Plugin name
'1.0', // Plugin version
'Sandbox plugin', // Plugin desription
'Awilum', // Plugin Author
'http://localhost/', // Plugin athor contacts
'sandboxAdmin'); // Plugin admin function
Далее подключаем языковую поддержку
// Get language file for this plugin
getPluginLanguage('Sandbox');
Админка подключается так:
// Get plugin admin
getPluginAdmin('Sandbox');
Template CMS Plugin API работает по принципу хуков/зацепок. Можно зацепится к существующим хукам или создать свой в плагине к которому могут прицепляться другие плагины.
Прицепить свою функцию к существующему хуку, например главное меню админки.
addHook('admin_main_navigation','adminNavigation',array('sandbox',lang('sandbox_name')));
admin_main_navigation - хук
adminNavigation - функция Plugin API для создания главного меню админки.
array('sandbox',lang('sandbox_name')) - массив параметров. Первый в данном случае это название плагина.
Важно: в нижнем регистре. Затем название нового пункта меню берем из языковых файлов: $lang['sandbox_name']
Пример добавления подменю к меню
addHook('admin_pages_second_navigation','adminSecondNavigation',array('pages',lang('sandbox_name'),'sandbox'));
admin_название плагина_second_navigation - хук
adminSecondNavigation - функция для создания подменю
Так можно любую свою функцию прицепить к какому нибудь хуку.
Пример:
addHook('название хука','название вашей функции');
Рассмотрим разработку административной части плагина SandboxAdmin.php
/**
* Sandbox admin
*/
function sandboxAdmin() {
// Check for get actions
if (isGet('action')) {
// Switch actions
switch (get('action')) {
case "show":
include 'templates/Template.php';
break;
case "close":
include 'templates/Template.php';
break;
}
// Its mean that you can add your own actions for this plugin
runHook('admin_sandbox_extra_actions');
} else { // Load main template
include 'templates/SandboxTemplate.php';
}
}
Тут не сложно, отлавливаем Экшены и выполняем необходимые действия на них, загружаем шаблоны из папки /templates/ и тд... Хочу обратить внимание на это
runHook('admin_sandbox_extra_actions');
runHook - позволяет создавать/запускать хук к которой можно прицепится с помощью addHook.
Если вы хотите что бы к вашему плагину могли прицепляться другие плагины, оставляйте хуки/зацепки.
Пример:
runHook('admin_название плагина_extra_actions');
Как видите нет ничего особо сложного. Пишите свои функции, подключаетесь к существующим хукам/зацепкам или же создаете свои для возможности дальнейшего расширения вашего плагина другими плагинами.
Вопросы по разработке плагинов можно задавать в соответствуещем разделе на форуме.
Скачать: SandboxPlugin