|
|
Описание: Здесь FAQ, информация о том, как создать плагин, как работает система плагинов и т.д.. |
Поиск в теме | Версия для печати |
WebMaster |
Отправлено: 20 октября 2013 — 15:48
|
Advanced Member
Покинул форум
Сообщений всего: 428
Дата рег-ции: Окт. 2013
Репутация: 32
|
Что такое плагин?
Плагин - модуль, который предназначен для расширения функциональности ExBB. С помощью плагинов можно расширять функционал ExBB без редактирования кода движка(нужно только зарегистрировать событие если его нет).
Система плагинов реализована с помощью событий и их обработчиков.
Что такое событие и его обрабочик?
Событие - место в коде движка, где происходит какое-либо важное действие(например обработка сообщения перед его записью в файл). Для того, чтобы событие стало доступно для обработки плагинами, его нужно зарегистрировать. Регистрация события происходит с помощью метода CODE:setAction($action, $params = array()); . класса plugins
Обработчик - функция, которая выполняется во время определённого события. Обработчиков может быть неограниченное количество. Для того, чтобы во время события выполнялся обработчику, его тоже нужно зарегистрировать. Регистрация обработчика происходит с помощью метода CODE:setHandler($function, $action); . класса plugins
Как я могу установить систему плагинов на свой форум?
Процесс установки системы плагинов описан здесь
Где находится панель управления плагинами?
Панель управления плагинами находится по адресу http://вашфорум.ru/plugins.php
Как установить новый плагин?
Автоматический установщик плагинов находится по адресу http://вашфорум.ru/plugins.php?a...n=install_plugin
Я установил плагин, нет никаких ошибок, но он не работает. Что делать?
Во первых проверьте, включен ли плагин. Это можно сделать здесь http://вашфорум.ru/plugins.php
Если плагин включен, но всё равно не работает, то нужно убедиться, что событие, которое он должен обрабатывать присутствует в системе. Как добавить событие для конкретного плагина должно быть написано в инструкции по его установке.
Как плагины влияют на скорость работы движка?
Плагины минимально влияют на скорость работы движка. Я использую такую систему в самодельном движке "Serial CMS"(Если кому интересно, могу скинуть исходники) и при 10-20 установленных плагинах и нескольких SQL запросах скорость генерации совсем маленькая(время 0.02-0.25сек.)
Какой функционал можно добавить с помощью плагинов?
С помощью моей реализации плагинов можно добавлять BB коды, смайлики, управлять выводом HTML кода и многое другое, но такие функции, как смена редактора сообщений реализовать скорее всего не удастся(для этого нужно модернизировать систему плагинов и менять код движка)
Что нужно знать и уметь, чтобы создать плагин?
Требуется знание основ PHP, HTML.
Для того, чтобы создать плагин не обязательно(но желательно) знать тонкости работы движка. |
|
|
WebMaster |
Отправлено: 20 октября 2013 — 17:12
|
Advanced Member
Покинул форум
Сообщений всего: 428
Дата рег-ции: Окт. 2013
Репутация: 32
|
Создание плагина "Слова-ссылки"
Сейчас мы создадим плагин, который будет позволять заменять слова в сообщении ссылками.
1) Создайте такую структуру файлов:
CODE:install.php
info.php
wordlinks/
--plugin.php
--setting.php
Файлы install.php и info.php необходимы исключительно для установщика плагинов.
Файлы plugin.php и setting.php - это файлы самого плагина.
В файле plugin.php находятся обработчики событий, а в файле setting.php форма настроек плагина.
2) Создание информации о плагине.
В файл info.php добавьте такой код:
CODE:
<form method="POST" action="plugins.php?action=install_plugin&step=3">
<table width="99%" cellpadding="4" cellspacing="1" border="0" align="center" class="forumline">
<tr>
<th class="thHead" width="70%">Плагин:</th>
</tr>
<tr class="gen">
<td class="row1"><b>Слова-ссылки</b><br /><span class="gensmall">Плагин позволяет автоматически заменять слова ссылками.</span></td>
</tr>
<tr>
<td class="catBottom" colspan="3" align="center"><input type="submit" name="submit" value="Установить" class="mainoption" /></td>
</tr>
</table>
</form>
В этом файле находится форма, которая выводится при установке плагина.
3) Создание скрипта установки плагина
CODE:
<?php
if (!is_dir('plugins/wordlinks')) {
mkdir('plugins/wordlinks/');
}
define('PLUGIN', 'plugins/wordlinks/');
define('R', dirname(__FILE__).'/wordlinks/');
copy(R.'plugin.php', PLUGIN.'plugin.php');
copy(R.'setting.php', PLUGIN.'setting.php');
$plugins = fdb::read('plugins');
$plugins['wordlinks'] = array(
'active' => 1,
'name' => 'wordlinks',
'title' => 'Слова-ссылки',
'description' => 'Плагин позволяет заменять слова ссылками.'
);
fdb::write('plugins', $plugins);
$words = array(
'TEST' => 'http://test.ru/',
);
fdb::write('wordlinks', $words);
Теперь разберём подробнее этот код.
CODE:if (!is_dir('plugins/wordlinks')) {
mkdir('plugins/wordlinks/');
}
В этих строках проверяется на существование директория с плагином, и если её не существует, то она создаётся с помощью функции mkdir
CODE:define('PLUGIN', 'plugins/wordlinks/');
define('R', dirname(__FILE__).'/wordlinks/');
Здесь определяются константы. PLUGIN - каталог, в котором должен располагаться плагин, R - текущее расположение плагина.
CODE:copy(R.'plugin.php', PLUGIN.'plugin.php');
copy(R.'setting.php', PLUGIN.'setting.php');
Копирование файлов плагина из каталога uploads/plugins/wordlinks/ в каталог plugins/wordlinks/
CODE:$plugins = fdb::read('plugins');
$plugins['wordlinks'] = array(
'active' => 1,
'name' => 'wordlinks',
'title' => 'Слова-ссылки',
'description' => 'Плагин позволяет заменять слова ссылками.'
);
fdb::write('plugins', $plugins);
Здесь происходит регистрация плагина в системе. Сначала считывается содержимое файла plugins.php в массив такой структуры:
CODE:array (
[Название плагина] => array(
active => Включён(1) или выключе(0) плагин,
name => 'Название каталога с плагином',
title => 'Название плагина',
description => 'Описание плагина',
),
);
После этого происходит добавление информации о плагинах в массив всех плагинов.
Затем этот массив записывается обратно в файл.
CODE:$words = array(
'TEST' => 'http://test.ru/',
);
Это - ассоциативный массив слов и ссылок, на которые они заменяются.
CODE:fdb::write('wordlinks', $words);
Запись массива со словами в файл wordlinks.php в каталог data/
3) Создание обработчика событий
В файл wordlinks/plugin.php запишите такой код:
CODE:<?php
function parse_message($data) {
$words = fdb::read('wordlinks');
foreach ($words as $word => $link) {
$data[0] = str_replace($word, "<a href='{$link}'>{$word}</a>", $data[0]);
}
}
plugins::setHandler('parse_message', 'parse_message');
Функция CODE:plugins::setHandler('Обработчик', 'Событие'); регистрирует обработчик для события.
Теперь основные вопросы, которые могут появиться:
- Откуда берётся параметр $data?
- Этот параметр передаётся обработчику во время регистрации события.
- Что содержит параметр $data;
- $data - массив, первый элемент которого содержит указатель на обрабатываемый текст
4) Создание формы настроек:
В файл setting.php запишите такой код:
CODE:
<?php
if (isset($_GET['save'])) {
$array = linesToArray($_POST['wordarray']);
fdb::write('wordlinks', $array);
}
function arrayToLines($words) {
$string = '';
foreach ($words as $word => $link) {
$string .= $word.'='.$link."\n";
}
return $string;
}
function linesToArray($words) {
$array = array();
$lines = explode("\n", $words);
foreach ($lines as $id => $line) {
$line_array = explode('=', $line);
$array[$line_array[0]] = $line_array[1];
}
return $array;
}
$links = fdb::read('wordlinks');
$links = arrayToLines($links);
echo <<<DATA
<h1>Автоматическая подстановка ссылок</h1>
<p class="gensmall">'Здесь вы можете добавить, изменить или удалить слова, которые будут заменяться соответствующими им ссылками (устанавливаемыми вами).<br><br><b>Инструкция:</b> Введите "ключевое слово или фразу" и через знак "=" адрес ссылки, на который перейдет пользователь при клике. Убедитесь что каждый набор ключевого слова (или фразы) и ссылка находится на одной линии.</p>
<form action="plugins.php?action=setting_plugin&plugin={$_GET['plugin']}&save=1" method="post">
<input type="hidden" name="action" value="censor">
<input type="hidden" name="process" value="1">
<table width="100%" cellpadding="4" cellspacing="1" border="0" align="center" class="forumline">
<tr>
<th class="thHead">Настрока плагина "Автоматическая подстановка ссылок"</th>
</tr>
<tr class="gen">
<td align="center" class="row2"><textarea class="post" type="text" cols="105" rows="35" wrap="virtual" name="wordarray">{$links}</textarea></td>
</tr>
<tr>
<td class="catBottom" align="center"><input type="submit" name="submit" value="Сохранить" class="mainoption" /></td>
</tr>
</table>
</form>
<br clear="all" />
DATA;
?>
5) Сборка плагина.
Упакуйте созданные файлы install.php, info.php, wordlinks/plugin.php и wordlinks/setting.php в zip архив.
Всё, сам плагин готов.
Для того, чтобы он работал на чистом ExBB нужно установить систему плагинов и зарегистрировать событие parse_message
Для регистрации события нужно сделать следующее:
- Откройте файл include/fm.class.php
После строки
CODE:$string = preg_replace_callback("#\[search\](.+?)\[\/search\]#is","search_link",$string);
добавьте код:
CODE://--!Регистрация события!--
plugins::setAction('parse_message', array(&$string));
//--!Регистрация события!--
Для установки плагина перейдите по адресу http://вашфорум.ru/plugin.php?ac...n=install_plugin
Для управления плагином перейдите по адресу http://вашфорум.ru/plugins.php. Напротив плагина "Слова-ссылки" есть ссылка на страницу настроек плагина.
К сообщению прикреплён архив с готовым плагином. Для его установки достаточно зарегистрировать событие parse_message
|
|
|
CAB |
Отправлено: 21 октября 2013 — 09:31
|
Super Member
Покинул форум
Сообщений всего: 629
Дата рег-ции: Февр. 2011
Откуда: Москва
Репутация: 30
|
WebMaster пишет:Как вы предлагаете реализовать взаимодействие между плагинами? Если бы я знал... (мечтательно о свалившихся на меня деньгах )
Но в принципе логично было бы предусмотреть возможность выставлять очередность или приоритет при обработке одного и того же объекта. Проблема в том, с моей точки зрения, что сложновато предвидеть для чего в будущем приспособят использовать тот или иной плагин. Если, например, жёстко закрепить в плагине объект обработки, например текст сообщения, то можно просто у всех плагинов, которые тоже предназначены для текста сообщения, в настройках выставлять очерёдность обработки данного объекта. А если у плагина несколько объектов, то очерёдность должна настраиваться для каждого отдельно. Но это хорошо если всё в виде плагинов. Если что-то в движке, тут сложнее намного. Тем более с учётом что далеко не у всех всё установлено или используется. |
|
|
|
Поиск в теме | Версия для печати |
Страниц (2): [1] 2 » |
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0) |
« Обсуждение » |
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|