Расширение - это новая система изменения и дополнения функционала phpBB, представленная в версии phpBB 3.1, пришедшая на смену модам, использовавшимся в версии phpBB 3.0. Представляет из себя набор файлов, копируемых в папку
Основное преимущество системы расширений - отсутствие необходимости вручную вносить изменения в исходный код и базу данных phpBB. Первое основано на так называемых Событиях.
Событие (event) - это строка (как правило, одна или две) в исходном коде, добавленная разработчиками. События подразделяются на два вида: событие ядра и событие шаблона. Каждое событие имеет собственный идентификатор, по которому определяется, код каких расширений и в каком месте будет выполняться.
Пример: событие ядра в
Код: Выделить всё
$vars = array('post_id', 'topic_id', 'forum_id', 'draft_id', 'lastclick', 'submit', 'preview', 'save', 'load', 'delete', 'cancel', 'refresh', 'mode', 'error');
extract($phpbb_dispatcher->trigger_event('core.modify_posting_parameters', compact($vars)));
Пример: событие шаблона в
Код: Выделить всё
<!-- EVENT quickreply_editor_message_before -->
В свою очередь, в расширениях имеются так называемые "слушатели" (или подписчики) событий ядра (listeners, event subscribers), представляющая собой сопоставление идентификатора события с именем функции в расширении, которая должна быть вызвана при возникновении данного события.
Например:
Код: Выделить всё
static public function getSubscribedEvents()
{
return array(
'core.page_header' => 'show_quicknick',
'core.viewtopic_modify_page_title' => 'show_bbcodes_and_smilies',
'core.modify_posting_parameters' => 'change_subject',
'core.posting_modify_template_vars' => 'delete_re',
);
}
Существуют еще События шаблонов, для них система обработки немного отличается. При возникновении такого события, система пытается найти html файл, названный по имени данного события, в подпапках расширения, связанных со стилями. Например, для события
Какова файловая структура расширений ?
Расширения должны иметь определенную структуру - т.е. минимально необходимый набор папок и файлов, определяющих его работу:
Код: Выделить всё
\config\
\event\
\migrations\
\composer.json
\ext.php
1) Папка config.
В ней расположен единственный файл -
Код: Выделить всё
services:
test.quickreply.listener:
class: test\quickreply\event\listener
arguments:
- @auth
- @config
- @dbal.conn
- @template
- @user
- %core.root_path%
- %core.php_ext%
tags:
- { name: event.listener }
Строка
Строка class:
Блок
В данном случае мы видим, что конструктор расширения будет использовать стандартные классы phpBB:
Код: Выделить всё
public function __construct(\phpbb\auth\auth $auth, \phpbb\config\config $config, \phpbb\db\driver\driver $db, \phpbb\template\template $template, \phpbb\user $user, $phpbb_root_path, $php_ext)
{
$this->auth = $auth;
$this->config = $config;
$this->db = $db;
$this->template = $template;
$this->user = $user;
$this->phpbb_root_path = $phpbb_root_path;
$this->php_ext = $php_ext;
}
2) Папка event.
Папка срдержит файл, содержащий слушатели событий ядра. Если говорить проще - тут находится весь рабочий PHP код расширения. Следуя логике этой статьи, файл должен называться
Внутри файла находится основной класс расширения, фактически отвечающий за весь его функционал, являющийся потомком встроенного класса
class listener implements EventSubscriberInterface
Первой и второй стандартными функциями, с которыми мы встречаемся в данном классе, являются уже упомянутые выше конструктор класса
Все остальные функции являются пользовательскими, их имена, структура и исполняемый код зависят непосредственно от той задачи, которую решает расширение.
3) Папка migrations.
Здесь находятся файлы с инструкциями, ответственными за внесение дополнений и изменений в базу данных (добавление новых таблиц, столбцов в имеющихся таблицах, изменение и добавление новых конфигурационных параметров в таблицу
Как правило, файл именуется в соответствии с версией расширения, например,
Внутри файла находится класс, являющийся потомком класса
Таким образом, получаем определение класса:
Класс миграции состоит из набора стандартных функций, но могут быть и нестандартные.
Стандартными функциями являются:
4) Файл composer.json.
Данный файл отвечает за предоставление системе основной информации о расширении - его названии, версии, лицензии, авторе (или группе авторов), системных требованиях. К примеру
Код: Выделить всё
{
"name": "phpbbworld/snow",
"type": "phpbb-extension",
"description": "Расширение добавляет снегопад на ваш форум",
"homepage": "http://phpbbworld.ru/viewtopic.php?f=6&t=14",
"version": "0.1.0",
"time": "2014-06-28",
"license": "GPL-2.0",
"authors": [{
"name": "DeaDRoMeO",
"username": "Sergey",
"email": "barkovskiis@yandex.ru",
"homepage": "http://phpbbworld.ru",
"role": "Administrator"
}],
"require": {
"php": ">=5.3.3"
},
"extra": {
"display-name": "Снегопад",
"soft-require": {
"phpbb/phpbb": "3.1.*@dev"
}
}
}
Код: Выделить всё
<?php
/**
*
* @package thanks_for_posts
* @copyright (c) 2014 gfksx
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
namespace gfksx\thanks_for_posts;
/**
* Main extension class for this extension.
*/
class ext extends \phpbb\extension\base
{
}
Пффф, расширения это не такая уж и простая вещь
