====== Создание плагинов ====== Плагины для GetSimple позволяют легко модифицировать сайты, улучшать их вид и функциональность. Таким образом, система получает дополнительные возможности при неприкосновенности функций ядра. ===== Плагин в разрезе ===== Эта секция описывает составные части любого плагина. Для примера мы возьмем простой плагин, который выводит строку “Привет, мир!” (Hello World) на каждой странице сайта. Скачать плагин можно [[http://get-simple.info/data/uploads/hello-world.txt|здесь]]. Привет, мир!

'; } function hello_world_show() { echo '

Хочу вывести строку «Привет, мир!» во всех подвалах страниц всех тем. Такой вот я загадочный.

'; } ?>
===== Переменные плагинов ===== В принципе, можно просто прописать имя файла плагина, но разработчики рекомендуют сразу же после информации о плагине размещать в файле следующий код: # получение корректного идентификатора плагина $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]]