Базовые возможности плагинов
Материал из Документация 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')
- action - действие
Удаление таблиц базы данных через плагин(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')
- action - действие
Если хотите чтобы плагин использовал собственную страницу то используете:
- register_plugin_page($pname, $mode, $func_name, $show_template = 1) - Зарегистрировать собственную страницу плагина:
- $pname – идентификатор плагина
- $mode – команда, передаваемая плагину (пример обращения: ?action=plugin&plugin=&plugin_cmd=&), если команды нет – прописываем просто ‘’
- $func_name – наименование функции-обработчика данной команды
- $show_template – сейчас не используется

