Создание плагина "Слова-ссылки"
Сейчас мы создадим плагин, который будет позволять заменять слова в сообщении ссылками.
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