Тема: HOWTO: Создание расширений.
* * * Что такое расширение и для чего это нужно? * * *
Итак, расширения - это механизм, который позволяет добавлять функционал форуму не внося изменений в исходный код. Преимущества и недостатки такого механизма:
Преимущества:
+ код, реализованный в виде расширения, прост в написании, установке и удалении. Не нужно помнить какие файлы редактировались для добавления новой функции.
+ Обновлять ядро(основной код) форума можно не опасаясь потерять важные изменения и дополнения.
+ Обновлять модули также становится гораздо проще.
Недостатки:
- пока не выявлено
Как видим преимуществ все-же больше чем недостатков, поэтому продолжим.
______________________________
* * * За счет чего работают расширения? * * *
Расширения для PunBB возможны благодаря так называемым хукам(hook - крюк, ловушка).
Хук - перехват обработки события. Служит этот механизм для внедрения кода в определенное место ядра.
Как работают хуки?
Для примера возьмем последние строки файла header.php:
unset($main_elements);
($hook = get_hook('hd_end')) ? eval($hook) : null;
if (!defined('FORUM_HEADER'))
define('FORUM_HEADER', 1);Здесь мы видим, что в переменную $hook загружается некий код:
$hook = get_hook('hd_end')а затем выполняется:
eval($hook)Параметр обработчика(в нашем случае это hd_end) принято называть идентификатором хука или хуком.
Т.е. использование хука hd_end равносильно замене строки
($hook = get_hook('hd_end')) ? eval($hook) : null;Произвольным исходным кодом.
______________________________
* * * Структура расширения * * *
Все расширения должны находится в папке extesions. В этой папке необходимо создать свою папку, имя которой соответствует идентификатору расширения, например: my_extension, no_header, new_smilies и т.д. Категорически не рекомендую использовать префикс pun, например: pun_extension, pun_header, pun_smilies, потому как он "зарезервирован" для официальных(поддерживаемых командой разработчиков форума) расширений.
Для примера, я буду использовать идентификатор my_extension.
Папка расширения должна содержать файл manifest.xml в кодировке UTF-8. То есть относительный путь к файлу manifest.xml должен выглядеть следующим образом:
/extensions/my_extension/manifest.xml, где my_extension - идентификатор расширения.
Структура manifest.xml
Это пустая заготовка файла manifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">
<extension engine="1.0">
<id>my_extension</id>
<title>Мое расширение</title>
<version>1.0</version>
<description>Описание моего расширения</description>
<author>Andrew</author>
<minversion>1.3</minversion>
<maxtestedon>1.3.4</maxtestedon>
<hooks>
Здесь находятся хуки, реализующие функционал расширения.
</hooks>
</extension>Пояснения:
• Идентификатор расширения. Должен быть таким-же, как и имя папки, в которой расположен файл manifest.xml
<id>my_extension</id>• Имя расширения. Этим именем расширение будет подписано в админке форума.
<title>Мое расширение</title>• Версия
<version>1.0</version>• Описание
<description>Описание моего расширения.</description>• Автор расширения
<author>Andrew</author>• Минимальная версия ядра форума. Если версия форума будет ниже указанной, расширение не будет доступно для установки.
<minversion>1.3</minversion>• Максимальная версия, для которой проводилась проверка совместимости. Если версия форума выше указанной, форум установит расширение но предупредит о том, что расширение не тестировалось на совместимость
<maxtestedon>1.3.4</maxtestedon>