User Tools

Site Tools


ru:plugins:creation

Создание плагинов

Плагины для GetSimple позволяют легко модифицировать сайты, улучшать их вид и функциональность. Таким образом, система получает дополнительные возможности при неприкосновенности функций ядра.

Плагин в разрезе

Эта секция описывает составные части любого плагина. Для примера мы возьмем простой плагин, который выводит строку “Привет, мир!” (Hello World) на каждой странице сайта. Скачать плагин можно здесь.

<?php
/*
Plugin Name: Hello World
Description: Выводит "Привет, мир!" в подвале темы (footer)
Version: 1.0
Author: Chris Cagle
Author URI: http://www.cagintranet.com/
*/

# получение корректного идентификатора плагина
$thisfile=basename(__FILE__, ".php");

# регистрируем плагин в системе
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'  //главная функция плагина (функция администрирования)
);

# activate filter/активируем фильтр 
add_action('theme-footer','hello_world'); 

# Добавляем ссылку на вкладку Темы 
add_action('theme-sidebar','createSideMenu',array($thisfile,'Hello World description'));

# Теперь – функции плагина
function hello_world() {
	echo '<p>Привет, мир!</p>';
}

function hello_world_show() {
	echo '<p>Хочу вывести строку «Привет, мир!» во всех подвалах страниц всех тем. Такой вот я загадочный.</p>';
}
?>

Переменные плагинов

В принципе, можно просто прописать имя файла плагина, но разработчики рекомендуют сразу же после информации о плагине размещать в файле следующий код:

# получение корректного идентификатора плагина
$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).

Функции плагина

Функции этой секции плагина представляют собой либо пользовательские экшн-функции (действия), либо фильтр-функции (фильтры), привязываемые к хукам и фильтрам системы.

# Теперь – функции плагина
function hello_world() {
	echo '<p>Привет, мир!</p>';
}

function hello_world_show() {
	echo '<p>Хочу вывести строку «Привет, мир!» во всех подвалах страниц всех тем. Такой вот я загадочный.</p>';
}

Правила создания папок и файлов

Дополнительные файлы плагинов

Самый простой плагин состоит только из одного файла: мой_плагин.php, но если ваш плагин имеет в составе еще и другие файлы, их следует размещать в папке мой_плагин.

Если плагин обеспечивает многоязычную поддержку, языковые файлы размещаются в подпапке lang. С дополнительной информацией по интернационализации можно ознакомиться в этом разделе ВИКИ.

Точно так же в папке мой_плагин можно создавать поддиректории для хранения 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 или здесь.

Скрипты и стили

Начиная с версии 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/plugins/creation.txt · Last modified: 2013/10/15 10:35 by vladislav