====== Создание плагинов ======
Плагины для GetSimple позволяют легко модифицировать сайты, улучшать их вид и функциональность. Таким образом, система получает дополнительные возможности при неприкосновенности функций ядра.
===== Плагин в разрезе =====
Эта секция описывает составные части любого плагина. Для примера мы возьмем простой плагин, который выводит строку “Привет, мир!” (Hello World) на каждой странице сайта. Скачать плагин можно [[http://get-simple.info/data/uploads/hello-world.txt|здесь]].
Привет, мир!
Хочу вывести строку «Привет, мир!» во всех подвалах страниц всех тем. Такой вот я загадочный.
'; } ?> ===== Переменные плагинов ===== В принципе, можно просто прописать имя файла плагина, но разработчики рекомендуют сразу же после информации о плагине размещать в файле следующий код:
# получение корректного идентификатора плагина
$thisfile=basename(__FILE__, ".php");
Следующий фрагмент выводит информацию о вашем плагине на вкладку **Плагины**. Кроме того, в коде предписывается, на какой вкладке административной панели будет осуществляться управление вашим плагином (в нашем случае это - ‘//Тема/theme//’).
# register plugin
register_plugin(
$thisfile, //идентификатор плагина
'Hello World', //Название плагина
'1.0', //Версия плагина
'Chris Cagle', //автор плагина
'http://www.cagintranet.com/', //сайт автора
'Finds email addresses in content and components and "hides" them', //краткое описание плагина
'theme', //тип страницы – на какой из вкладок административной панели появится плагин
'hello_world_show' //главная функция плагина
);
**На заметку:** //$thisfile// не будет работать внутри хук-функций, таких, как в нашем примере //hello_world// или //hello_world_show//, так как внутри функций эта переменная будет содержать наименование плагина, загруженного перед текущим.
===== Хуки и фильтры =====
Этот код привязывает вашу пользовательскую функцию к определенному хуку или фильтру.
# активировать фильтр
add_action('theme-footer','hello_world',array());
**Синтаксис**: add_action('//наименование хука//','//имя функции для привязки//', //массив аргументов//);
Этот фрагмент кода выводит на экран ссылку на страницу плагина в административной панели (это – особый случай для вызова //add_action//):
# добавляем ссылку во вкладку Тема
add_action('theme-sidebar','createSideMenu',array($thisfile,'Hello World description'));
**Синтаксис**: add_action('//Имя_Вкладки-sidebar//','//createSideMenu//',//array($thisfile,'Текст ссылки/пункта бокового меню')//);
**На заметку**: При клике по данному пункту будет вызвана соответствующая вкладка панели и главная функция плагина (они уже были прописаны в секции плагина //register_plugin//). Таким образом, в большинстве случаев имя действия (//theme-sidebar//) и тип страницы (//theme/Тема//) должны совпадать.
**На заметку**: В версии 3.1 допускается создание нескольких пунктов бокового меню на вкладке административной панели путем добавления экшн-хука или действия к функции add_action .
# добавляем ссылки к вкладке Тема
add_action('theme-sidebar','createSideMenu',array($thisfile,'Текст бокового меню 1'),'действие1/action1');
add_action('theme-sidebar','createSideMenu',array($thisfile,' Текст бокового меню 2'),'действие2/action2');
Таким образом, в боковом сайдбаре вкладки **Тема** появятся два пункта меню. Задача разработчика – обеспечить их соответствующими действиями (//action//).
===== Функции плагина =====
Функции этой секции плагина представляют собой либо пользовательские экшн-функции (действия), либо фильтр-функции (фильтры), привязываемые к [[ru:plugins:hooks_filters|хукам и фильтрам системы]].
# Теперь – функции плагина
function hello_world() {
echo 'Привет, мир!
';
}
function hello_world_show() {
echo 'Хочу вывести строку «Привет, мир!» во всех подвалах страниц всех тем. Такой вот я загадочный.
';
}
===== Правила создания папок и файлов =====
==== Дополнительные файлы плагинов ====
Самый простой плагин состоит только из одного файла: //мой_плагин.php//, но если ваш плагин имеет в составе еще и другие файлы, их следует размещать в папке //мой_плагин//.
Если плагин обеспечивает многоязычную поддержку, языковые файлы размещаются в подпапке //lang//. С дополнительной информацией по интернационализации можно ознакомиться [[ru:plugins:i18n|в этом разделе]] ВИКИ.
Точно так же в папке //мой_плагин// можно создавать поддиректории для хранения js-скриптов, стилей, графики и пр. Для всех директорий, к файлам которых браузер должен иметь прямой доступ, следует добавить //.htaccess-файл// со следующей строкой:
Allow from all
Таким образом, образец структуры файлов и папок вашего плагина мой_плагин, содержащего дополнительные php-файлы и графику и поддерживающего несколько языков, выглядит следующим образом:
- my_plugin.php
- my_plugin (папка вашего плагина)
- .htaccess (одна строка: Deny from all)
- common_functions.php
- lang (поддиректория)
- .htaccess (одна строка: Deny from all)
- en_US.php
- de_DE.php
- it_IT.php
- img (поддиректория)
- .htaccess (одна строка: Allow from all)
- add.png
- delete.png
- edit.png
==== Хранение данных и настроек ====
Если в процессе работы плагина возникает необходимость сохранять данные на сервере, разработчики рекомендуют делать это внутри папки, путь которой определен как системная константа **GSDATAOTHERPATH**. Например:если вашему плагину требуется сохранить идентификатор ресурса UA-XXXXX для Google, его следует сохранить в папке ///Путь_к_GetSimple/data/other/папка_моего_плагина/ua-data.txt//, где //папка_моего_плагина// – это созданная плагином папка, а //ua-data.txt// – файл, который хранит полученный идентификатор.
При сохранении информации или доступе к файлам и папкам GetSimple всегда следует использовать системные константы путей. Их список можно посмотреть в файле ///admin/inc/common.php// [[http://code.google.com/p/get-simple-cms/source/browse/trunk/admin/inc/common.php|или здесь]].
===== Скрипты и стили =====
Начиная с версии 3.1, у разработчиков плагинов появилась возможность ставить в очередь и загружать скрипты и стили как во фронтенд, так и в бэкенд. Механизм системы обеспечивает загрузку только одного экземпляра определенного скрипта или стиля. Кроме того, у разработчика появляется возможность включать свои скрипты и стили как отдельные файлы в состав плагина.
Разработчики GetSimple рекомендуют размещать дополнительные скрипты и стили в папке с именем вашего плагина в следующем порядке:
* ///папка_моего_плагина/js// для javascript - файлов
* /// папка_моего_плагина /css// – для файлов стилей
=== Скрипты и стили по умолчанию ===
GetSimple 3.1 содержит конфигурацию для постановки в очередь на загрузку следующих скриптов и стилей:
**Скрипты**
* jquery – CDN-версия Jquery
* jquery-ui - CDN-версия JQuery UI
* fancybox – скрипт JQuery-плагина Fancybox
* getsimple – Javascript для системы
**Стили**
* getsimple – CSS- стили Getsimple
**На заметку**: Jquery, Fancybox и getsimple загружаются автоматически для каждой страницы административного бэкенда.
==== Регистрация и постановка в очередь для скрипта ====
Для применения скрипта его необходимо зарегистрировать в системе:
// register_script($handle, $src, $ver, $in_footer=FALSE)
// $handle название скрипта, должно быть уникальным для системы
// $src путь к файлу скрипта для загрузки
// $ver версия скрипта
// $in_footer если true – загрузить скрипт в футер (подвал) страницы
register_script('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js', '1.7.1', FALSE);
Приведенный выше код регистрирует CDN-версию JQiery, но его загрузки не произойдет, пока он не будет помещен в очередь.
Для постановки зарегистрированного скрипта в очередь и его загрузки используйте следующий код:
// queue_script($name,$where);
// $name название скрипта для загрузки
// $where т.е. куда - GSFRONT для темы или внешней части сайта, GSBACK для раздела администрирования или бэкенда, GSBOTH и во фронтенд, и в бэкенд.
queue_script('jquery',GSBOTH);
Приведенный выше код загрузит библиотеку JQuery в вашу тему, а также в административную панель
Для регистрации скрипта из папки вашего плагина используйте следующий код:
register_script('pluginscriptname', $SITEURL.'plugins/my_plugin_folder/your.script.js', '0.1', FALSE);
В окончательной версии плагина, если для фронтенда требуется библиотека //Jquery//, поставьте ее в очередь используя параметр //GSFRONT//. Независимо от того, сколько плагинов требуют эту библиотеку, она будет загружена только один раз.
==== Регистрация и постановка в очередь стилей ====
Для использования собственных файлов стиля вы должны зарегистрировать их в системе.
// register_style($handle, $src, $ver)
// $handle название стиля, должно быть уникальным для системы
// $src путь к файлу стиля для загрузки
// $ver версия
// $media тип media – тип носителя или устройства
register_style('getsimple', $SITEURL.$GSADMIN.'/template/style.php', GSVERSION, 'screen');
Приведенный выше код регистрирует CSS-стиль, но его загрузка не происходит, пока он не будет помещен в очередь.
Для постановки зарегистрированного стиля в очередь и его загрузки используйте следующий код:
// queue_style($name,$where);
// $name название стиля для загрузки
// $where т.е. куда - GSFRONT для темы или внешней части сайта, GSBACK для раздела администрирования или бэкенда, GSBOTH и во фронтенд, и в бэкенд.
queue_style('getsimple',GSBOTH);
====== Ссылки ======
На главную [[ru:|Содержание]]
===== Страницы этой секции =====
=== Разработка плагинов ===
*[[ru:plugins:extend_api|Работа с Extend API ]]
*[[ru:plugins:hooks_filters|Хуки и фильтры]]
*[[ru:plugins:tabs_menus|Вкладки и боковые меню]]
*[[ru:plugins:tips|Советы и рекомендации]]
*[[ru:plugins:update_notifications|Взаимодействие плагинов и секции Extend сайта get-simple.info]]