1323
- 0
- Уровень сложности исполнения: это делается простым копированием и нажиманием кнопки
Ну надо было давно это опубликовать, скопировать давно скопировал, а руки не доходили подредактировать, да и черновиков многовато,надо половину удалить . Здесь собрана инфа (устаревшая) по созданию плагинов, такая своеобразная API. Ну кому нужно тот поймет, и разберется. Система еще не так далеко ушла . Если что надо поправить,изменить пишите в комментарии.
Классическая структура плагина
файл-описание, хранит название/версию/описание плагина и ссылки на файлы выполняющие требуемые функции в плагине
Код:
;
; Version description file for plugin @@ Next Generation CMS
;
; Имя которое будет отображаться в плагине
ID: name
; Название плагина
Name: Имя
; Версия плагина
Version: 0.01
; список экшнов ("перехватчиков управления") на вызов которых будет подгружаться плагин
Acts: index
; Выполняемый файл
File: plugin.php
; Файл конфигурации
Config: config.php
; Файл инсталяции
Install: install.php
; Файл удаления
Deinstall: deinstall.php
; Тип...
Type: plugin
; Описание плагина
Description: Использование тегов и облака тегов
; Автор плагина
Author: Name
; Сайт автора
Author_URI: http://ngcms.ru/
URI: http://ngcms.ru/
; Название плагина
Title: Название
; Краткая информация о плагине
Information: Тест плагин...
; Включить до установки системы
Preinstall: no
plugin.php
файл содержащий основной код (имя файла задаётся в файле version)
config.php - файл WEB конфигуратора для плагина
install.php - инсталлятор для плагина
deinstall.php - деинсталлятор для плагина
readme - Руководство по работе с плагином!
Базовые возможности плагинов
Для вывода вашего кода в полною новость(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);
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'] = $*;
}
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;
}
}
$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);
}
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');
}
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 – сейчас не используется
Константы
prefix - Префикс имени базы данных. Например: ng
home - Адрес главное страницы сайта. Например: http://sites.ru
home_title - Название сайта. Например: NGCMS
admin_url - Адрес до админ. панели. Например:http://sites.ru/engine
files_dir - Абсолютный путь до папки с загруженными файлами. Например: Z:/home/ngcms/www/uploads/files/
files_url - Адрес до папки с загруженными файлами. Например: http://ngcms/uploads/files
images_dir - Абсолютный путь до папки с загруженными изображениями. Например: Z:/home/ngcms/www/uploads/images/
images_url - Адрес до папки с загруженными загруженными изображениями. Например: http://ngcms/uploads/images
avatars_dir - Абсолютный путь до папки с загруженными аватарами пользователей. Например: Z:/home/ngcms/www/uploads/avatars/
avatars_url - Адрес до папки с загруженными загруженными аватарами пользователей.Например: http://ngcms/uploads/avatars
photos_dir - Абсолютный путь до папки с загруженными фотографиями пользователей. Например: Z:/home/ngcms/www/uploads/photos/
photos_url - Адрес до папки с загруженными загруженными фотографиями пользователей. Например: http://ngcms/uploads/photos
timestamp - Формат времени. Например: j.m.Y - H:i
date_adjust - Временная зона.
skins_url - Адрес до папки с шаблоном админ. панели. Например: http://sites.ru/engine/skins/default
tpl_actions - Абсолютный путь до папки *.tpl файлов шаблона админки. Например: Z:/home/ngcms/www/engine/skins/default/tpl
tpl_dir - Абсолютный путь к папке шаблонов сайта. Например: Z:/home/ngcms/www/templates/
extras_dir - Абсолютный путь к папке с плагинами(мадами, компонентами). Например: Z:/home/ngcms/www/engine/plugins
Специальные переменные
$template - Переменная содержит в себе массив. Используется для вывода или скрытия данных в шаблоне main.tpl.
$template['vars']['ТЕГ_ВЫВОДИМЫЙ_В_ШАБЛОН']
$template['regx']['РЕГ_ВЫРАЖЕНИЕ']
Требует объявления как глобальный: global $template; Пример: Если нужно вывести.
Код:
if (!defined('NGCMS'))
{
die ('HAL');
}
add_act('index', 'primer');
function primer()
{global $template;
$template['vars']['plugins_primer'] = 'Пример плагина';
}
Скрыть что либо:
Код:
if (!defined('NGCMS'))
{
die ('HAL');
}
add_act('index', 'primer');
function primer()
{global $template;
if(in_array($userROW))
$template['regx']['/\[plugin_primer\](.*?)\[\/plugin_primer\]/si'] = '$1';
else
$template['regx']['/\[plugin_primer\](.*?)\[\/plugin_primer\]/si'] = '';
}
$mysql - Инстанс класса mysql, предназначен для работы с БД.
Требует объявления как глобальный: global $mysql;
Код:
$mysql->select('SQL_ЗАПРОС');
Array
(
[0] => Array
(
[0] => Данные
[row] => Данные
[1] => Данные_2
[row_2] => Данные_2
)
[1] => Array
(
[0] => Данные
[row] => Данные
[1] => Данные_2
[row_2] => Данные_2
)
)
0 - массив, состоящий как из ассоциативных индексов, так и из численных.
-1 - массив, состоящий только из числовых индексов.
1 - массив, состоящий только из ассоциативного соответствия.
Код:
$mysql->record('SQL_ЗАПРОС');
Array
(
[0] => Данные
[row] => Данные
[1] => Данные_2
[row_2] => Данные_2
)
0 - массив, состоящий как из ассоциативных индексов, так и из численных.
-1 - массив, состоящий только из числовых индексов.
1 - массив, состоящий только из ассоциативного соответствия.
$mysql->result('SQL_ЗАПРОС'); возвращает значение одной ячейки результата запроса.
$mysql->lastid('ИМЯ_ТАБЛИЦЫ'); возвращает ID, сгенерированный колонкой с AUTO_INCREMENT последним запросом INSERT к серверу.
$parse - Инстанс класса parse, предназначен для обработки BB кодов.
$parse->bbcodes('ТЕКСТ') - Обрабатывает bb коды.
Требует объявления как глобальный: global $parse;
$lang - массив с загруженными переменными из языковых файлов. Требует объявления как глобальный: global $lang;
$SUPRESS_TEMPLATE_SHOW - флаг, при установке двиг не показывает шаблон, но показывает значение переменной $template[‘vars’][‘mainblock’] (основной блок данных). Требует объявления как глобальный: Требует объявления как глобальный: global $SUPRESS_TEMPLATE_SHOW;
$SUPRESS_MAINBLOCK_SHOW - флаг, при котором двиг не показывает основной блок данных. Установка обоих переменных используется в плагинах, которые полностью генерируют содержимое страницы. К примеру, плагин rss_show. Требует объявления как глобальный: global $SUPRESS_MAINBLOCK_SHOW;
$catz - Массив с категориями, в качестве ключа – альт. Имя категории, в качестве значения – вся SQL строка по данной категории (в виде массива ‘поле’ => ‘значение’). Требует объявления как глобальный: global $catz;
$catmap - Массив для более быстрого поиска по массиву $catz, данные хранятся в виде ‘ID категории’ => ‘альт. Имя категории’). Требует объявления как глобальный: global $catmap;
$userROW - Переменная, содержащая строку данных из SQL по текущему пользователю (если пользователь залогинен). Для проверки залогинен ли текущий пользователь можно использовать конструкцию if (is_array($userROW)) { print “Logged”; } else { print “Not logged”; }
Требует объявления как глобальный: global $userROW;
$SYSTEM_FLAGS - Внутренняя переменная движка, содержит массив системных флагов. Пользователю доступны следющие элементы:
$SYSTEM_FLAGS['info']['title']['group'] - название группы.
$SYSTEM_FLAGS['info']['title']['item '] - название элемента.
$SYSTEM_FLAGS['meta']['description'] - Вывод описание в <meta name="description" content="ВАШЕ_ОПИСАНИЕ" />
$SYSTEM_FLAGS['meta']['keywords'] - Выводит ключевые слова в <meta name="keywords" content="КЛЮЧЕВЫЕ_СЛОВА" />.
$SYSTEM_FLAGS['template.main.name'] - Дает возможность подменить основной шаблон main.tpl на свой. Название шаблона указывается без расширения.
Требует объявления как глобальный: global $SYSTEM_FLAGS;
$ip - IP адрес пользователя.
Требует объявления как глобальный: global $ip;
$EXTRA_CSS - Внутренняя переменная системы.
Требует объявления как глобальный: global $EXTRA_CSS;
register_stylesheet($url) - Зарегистрировать таблицу стилей (CSS), она будет отображаться на каждой странице двига в шаблоне main.tpl в переменной {htmlvars} Функция – сокращённый способ вызова функции register_htmlvar(‘css’, $url).
register_htmlvar($type, $data) - Зарегистрировать (для отображения) HTML переменную. Доступные типы ($type):
css – регистрация таблицы стилей, в качестве $data передаётся URL
js – регистрация JS кода, в качестве $data передаётся URL
rss – регистрация ссылки-указателя на RSS ленту для страницы, в качестве $data передаётся URL
plain – прямой вывод значения из $data в HTML поток, применяется в случаях, когда необходимо вставить переменную с контентом, отличающимся от указанного выше набора (css/js/rss).
LoadPluginLang($plugin, $file, $group = , $prefix = , $delimiter = '_') - Загрузить языковой файл плагина. Языковой файл ищется в каталоге плагина в подкаталоге lang/ТЕКУЩИЙ_ЯЗЫК/
$plugin – идентификатор плагина
$file – имя файла (файл должен иметь расширение .ini, в функции указывается имя файла без расширения)
$group – группа, в которой хранится необходимый языковой файл. Фактически – подкаталог относительно текущего каталога с языковыми файлами
$prefix – префикс, добавляемый к переменным из языкового файла. Необходим для того, чтобы исключить пересечения с переменными движка или других плагинов. По умолчанию – идентификатор плагина
$delimiter – разделитель между префиксом и именем переменной, по умолчанию – ‘_’
Можешь почитать и вот эту статейку "Социальные кнопки с блур эффектом"
Это тоже интересно
- 17.08.19Плагин ognews
- 05.08.15Еще один хак для плагина basket
- 06.09.19Плагин auth_basic
- 21.04.21Про обновление
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.