Разработка плагинов

Плагин в 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


blog comments powered by Disqus