Хаки и Скрипты Next Generation CMS

Все данные для создания плагинов (архив)

irbees2008 irbees2008 Опубликовано - 8 - августа Настройка плагинов
1195 - 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);
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 – сейчас не используется

Константы

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'] = 'Пример плагина';

}
И теперь если добавить тег {plugins_primer} в main.tpl он выведет: Пример плагина.

Скрыть что либо:

Код:
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'] = '';

}
Помещаем в шаблон main.tpl [plugin_primer]То что здесь видит только автоматизироваться пользователь[/plugin_primer]

$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 – разделитель между префиксом и именем переменной, по умолчанию – ‘_’

Можешь почитать и вот эту статейку "Модальное окно с фреймом"

Опрос

Ваше мнение

Как вам наш дизайн сайта?
Результаты

Последние комментарии

Теги

Anything in here will be replaced on browsers that support the canvas element

Статистика

  • Caйту: 4403 дня
  • Новостей: 566
  • Комменты: 257
  • Зарегистрированно : 662
  • Онлайн всего: [13]
  • Гости: [11]
  • Поисковики: [2] Google, Яндекс
  • Были сегодня : [2] Google, Яндекс
  • SQL запросов: 30
  • Генерация страницы: 0.305сек
  • Потребление памяти: 5.208 Mb 
  •   Яндекс.Метрика