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

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

irbees2008 irbees2008 Опубликовано - 8 - августа Настройка плагинов
1197 - 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 – разделитель между префиксом и именем переменной, по умолчанию – ‘_’

Можешь почитать и вот эту статейку "Вот еще один скрипт подсветки кода использующий SyntaxHighlighter"

Опрос

Ваше мнение

какой форум лучше для вас
Результаты

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

Теги

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

Статистика

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