Базовые возможности плагинов

Материал из Документация NGCMS

Перейти к: навигация, поиск

Содержание

Для вывода вашего кода в полною новость(news.full.tpl), плагин использует следующую конструкцию:

if (!defined('NGCMS')) die ('HAL');
 
class PluginNewsFilter extends NewsFilter {
        function showNews($newsID, $SQLnews, &$tvars) {
 
        // ВАШ КОД
        $tvars['vars']['test'] = $*;
        }
}
 
register_filter('news','test', new PluginNewsFilter);
  • if (!defined('NGCMS')) die ('HAL'); - defined проверяет, существует ли константа NGCMS. Возвращает TRUE, если именованная константа NGCMS определена, FALSE - в ином случае.
  • register_filter($group, $name, $instance) - Зарегистрировать системный фильтр.
    • $group – индентификатор типа фильтра
    • $name – уникальный идентификатор фильтра
    • $instance – инстанс класса-фильтра

Поддерживаемые типы фильтров:

    • ‘news’ – обработчик новостей, в качестве инстанса должен передаваться инстанс наследника класса NewsFilter (см. engine/includes/inc/extras.inc.php)
    • ‘static’ – обработчик статических страниц, в качестве инстанса должен передаваться инстанс наследника класса StaticFilter (см. engine/includes/inc/extras.inc.php)
  • PluginNewsFilter - инстанс класса-фильтра, Может быть любим который объявляется в register_filter
  • $tvars - Массив с переменным для заполнения шаблона (news.full.tpl)
  • $tvars['vars'] = array(); - Массив вида ‘переменная’ => ‘значение’, которое будет отображаться пр и выводе шаблона

Для вывода в статистические страницы используют:

class PluginStaticFilter extends StaticFilter {
        function showStatic($staticID, $SQLnstatic, &$tvars) {
 
        // ВАШ КОД
        $tvars['vars']['test'] = $*;
        }
}
 
register_filter('static','test', new PluginStaticFilter);
  • if (!defined('NGCMS')) die ('HAL'); - defined проверяет, существует ли константа NGCMS. Возвращает TRUE, если именованная константа NGCMS определена, FALSE - в ином случае.
  • register_filter($group, $name, $instance) - Зарегистрировать системный фильтр.
    • $group – индентификатор типа фильтра
    • $name – уникальный идентификатор фильтра
    • $instance – инстанс класса-фильтра

Поддерживаемые типы фильтров:

    • ‘news’ – обработчик новостей, в качестве инстанса должен передаваться инстанс наследника класса NewsFilter (см. engine/includes/inc/extras.inc.php)
    • ‘static’ – обработчик статических страниц, в качестве инстанса должен передаваться инстанс наследника класса StaticFilter (см. engine/includes/inc/extras.inc.php)
  • PluginStaticFilter - инстанс класса-фильтра, Может быть любим который объявляется в register_filter
  • $tvars - Массив с переменным для заполнения шаблона (news.full.tpl)
  • $tvars['vars'] = array(); - Массив вида ‘переменная’ => ‘значение’, которое будет отображаться пр и выводе шаблона


Если нужно просто что то вывести в (main.tpl):

add_act('index', 'test');
 
function test() {
	global $template, $tvars;
 
		// ВАШ КОД
		$template['vars']['test'] = $*;
}
  • add_act('index', 'test'); - подключаем экшн
  • function test() {// Операторы} - Аргумент функции принемает значение названия плагина объявленого в экшене
  • global - Объявляем нужные нам переменные для использования в плагине
  • $template - Массив с переменными для заполнения основного шаблона (main.tpl). $template[‘vars’] = array(); Массив вида ‘переменная’ => ‘значение’, которое будет отображаться пр и выводе шаблона.

Переменные могут быть 3х видов:

    • [текст] – будет заменять текстовый блок [текст]
    • текст – будет заменять текстовый блок {текст} (стандартный вид переменной)
    • plugin_ИМЯ или plugin_ИМЯ_НАЗВАНИЕ – будет заменять текстовый блок {plugin_ИМЯ} или {plugin_ИМЯ_НАЗВАНИЕ} в случае, если плагин ИМЯ активирован, в ином случае будет заменено на пустоту


Использование кеширования в плагине:

Кеширование в плагине состоит из двух частей: - Одна из которых заносит из переменной данные которые нужно скешировать

if (extra_get_param('test','cache')) {
	// Запись
	cacheStoreFile($cacheFileName, $output, 'test');
}
//Кодирум в md5
$cacheFileName = md5('test'.$config['theme'].$config['default_lang'].$year.$month).'.txt';

- Другая вынемает берет из кеша закешированные данные:

// Чтение (в параметрах плагин хранит: cache - флаг сообщающий надо ли использовать кеш, cacheExpire - время жизни кеша в секундах
 	if (extra_get_param('test','cache'))	{
		$cacheData = cacheRetrieveFile($cacheFileName, extra_get_param('test','cacheExpire'), 'test');
		if ($cacheData != false){
			// We got data from cache. Return it and stop
			$template['vars']['test'] = $cacheData;
			return;
		}
	}
  • Сохранить данные в файл-кеш: $fname - имя файла
  • $data - содержание
  • $plugin - ID плагина
  • function cacheStoreFile($fname, $data, $plugin = ) Возвращает: true - при успехе
  • false - при неуспехе Получить данные из кеш-файла с учётом времени жизни: $fname - имя файла
  • $expire - время жизни данных в секундах
  • $plugin - ID плагина
  • function cacheRetrieveFile($fname, $expire, $plugin = ) Возвращает: false - если данных нет или устарели данные если они есть и не устарели


Установка таблиц базы данных через плагин(install.php):

// Protect against hack attempts
if (!defined('NGCMS')) die ('HAL');
 
//
// Configuration file for plugin
//
 
plugins_load_config();
 
$db_update = array(
array(
 'table'  => 'name',
 'action' => 'cmodify',
 'key'    => 'primary key(id)',
 'fields' => array(
    array('action' => 'cmodify', 'name' => 'id', 'type' => 'int', 'params' => 'not null auto_increment'),
    )
  )
 );
 
if ($_REQUEST['action'] == 'commit') {
	// If submit requested, do config save
	if (fixdb_plugin_install('Название плагина', $db_update)) {
 		plugin_mark_installed('Название плагина');
 	}
} else {
	$text = "Сообщение перед изменение БД";
	generate_install_page('Название плагина', $text);
}
  • table - наименование таблицы SQL
  • action - действие с таблицей
    • create - создать. если есть - ошибка
    • cmodify - создать. если есть - продолжить
    • modify - заменить поля в таблице. если таблицы нет - ошибка
    • drop - удалить таблицу
  • fields - массив а полями таблицы
    • action - действие
      • create - создать. если есть - ошибка
      • cmodify - создать. если есть - заменить
      • cleave - создать. если есть - оставить как есть
      • drop - удалить
    • name - название поля
    • type - тип поля
    • params - параметры создания (к примеру, 'not null auto_increment')

Удаление таблиц базы данных через плагин(deinstall.php):

// Protect against hack attempts
if (!defined('NGCMS')) die ('HAL');
//
// Configuration file for plugin
//
plugins_load_config();
 
$db_update = array(
	array(
		'table'		=>	'name',
		'action'	=>	'drop',
	)
);
 
if ($_REQUEST['action'] == 'commit') {
	if (fixdb_plugin_install($plugin, $db_update, 'deinstall')) {
		plugin_mark_deinstalled($plugin);
	}
} else {
	generate_install_page($plugin, '', 'deinstall');
}
  • table - наименование таблицы SQL
  • action - действие с таблицей
    • create - создать. если есть - ошибка
    • cmodify - создать. если есть - продолжить
    • modify - заменить поля в таблице. если таблицы нет - ошибка
    • drop - удалить таблицу
  • fields - массив а полями таблицы
    • action - действие
      • create - создать. если есть - ошибка
      • cmodify - создать. если есть - заменить
      • cleave - создать. если есть - оставить как есть
      • drop - удалить
    • name - название поля
    • type - тип поля
    • params - параметры создания (к примеру, 'not null auto_increment')

Если хотите чтобы плагин использовал собственную страницу то используете:

  • register_plugin_page($pname, $mode, $func_name, $show_template = 1) - Зарегистрировать собственную страницу плагина:
    • $pname – идентификатор плагина
    • $mode – команда, передаваемая плагину (пример обращения: ?action=plugin&plugin=&plugin_cmd=&), если команды нет – прописываем просто ‘’
    • $func_name – наименование функции-обработчика данной команды
    • $show_template – сейчас не используется