Статьи Новости Контакты

28.08.2008
Наталия Квитка

phpBB — пишем собственную модификацию

пример оформления собственного мода для форума на основе phpBB

Модификация phpBB
Не хватает функциональности на форуме? Напишем собственную модификацию!

Занимаясь администрированием форума на основе phpBB*, по мере развития собственного проекта разработчик все чаще и чаще может сталкиваться с необходимостью модификации и улучшения функциональности форума. Внешний вид, администрирование, модерирование, форматирование пользовательских сообщений — все эти сферы жизни сайта могут быть затронуты. Рано или поздно модов, имеющихся для скачивания на общедоступных источниках, может не хватить для удовлетворения ваших нужд. И у вас появляется интересная и волнующая возможность создать свою собственную модифицикацию для форума. И даже поделиться ею с остальными!

Существенно оживить внешний вид сообщений пользователей может расширение возможностей BB-кода* на вашем форуме. По умолчанию обрабатываются следующие BB-теги: [b] — для жирного шрифта, [i] — для курсива, [u] — для подчеркнутого текста, [quote] — для цитат, [list] — для создания списков, [img] — для вставки иллюстраций, [color] — для цветового форматирования, [size] — для изменения размера шрифта. Вы можете установить существующие плагины для добавления новых тегов, а можете придумать и добавить тег сами.

Модификация phpBB
Форма для создания нового сообщения в форуме на основе phpBB

Для того чтобы продемонстрировать, как это делается, добавим к стандартному набору тег [line-through], то есть зачеркнутный текст.

1. Модифицируем файл PHP*, обеспечивающий правильную интерпретацию тегов BB-кода и перевод их в обычные теги HTML*. Откроем файл includes/bbcode.php и добавим в функцию bbencode_first_pass обработчик нового тега:

// [line-through] and [/line-through] for line-through decorated text.
$text = preg_replace("#\[line-through\](.*?)\[/line-through\]#si", "[line-through:$uid]\\1[/line-through:$uid]", $text);

Полет фантазии в оформлении не знает предела: можно создать теги для единовременного добавления нескольких стилевых свойств

2. Там же в функцию bbencode_second_pass добавим второй обработчик по шаблону:

// [line-through] and [/line-through] for line-through decorated text.
$text = str_replace("[line-through:$uid]", $bbcode_tpl['line-through_open'], $text);
$text = str_replace("[/line-through:$uid]", $bbcode_tpl['line-through_close'], $text);

3. Закроем файл bbcode.php, предварительно сохранив изменения. Откроем для редактирования файл шаблона bbcode.tpl, находящийся в папке с используемой вами темой оформления. В список шаблонов обрабатываемых тегов добавим новый:

<!-- BEGIN line-through_open --><span style="text-decoration: line-through"><!-- END line-through_open -->
<!-- BEGIN line-through_close --></span><!-- END line-through_close -->

4. Закроем файл bbcode.tpl, сохранив изменения, и из той же директории откроем файл шаблона posting_body.tpl. Здесь нам необходимо внести новый тег в массив bbtags:

bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]',
'[img]','[/img]','[url]','[/url]','[line-through]','[/line-through]','');

5. В том же файле находим таблицу, содержащую вывод кнопок для вставки BB-кода в новое сообщение. В нужном месте там вставляем следующую ячейку:

<td><span class="genmed"><input type="button" class="button" accesskey="n" name="addbbcode18" value=" lt " style="text-decoration: line-through; width: 30px" onClick="bbstyle(18)" onMouseOver="helpline('n')" /></span></td>

Будьте бдительны: здесь 18 — это порядковый номер при счете, начиная с 0, тега [line-through] в массиве bbtags, который мы изменяли выше. n — буква для быстрого доступа к тегу. Функция helpline('n'), вызываемая при событии наведения мыши на кнопку, — подсказка. Для того чтобы подсказки работали, вам необходимо сделать следующее:

  • Добавить строку n_help = "{L_BBCODE_N_HELP}"; в блок helpline messages.

  • Закрыть, сохранив изменения, файл posting_body.tpl. Открыть для редактирования языковый файл language/lang_english/lang_main.php и добавить в него строку $lang['bbcode_n_help'] = 'Text-decoration: [line-through]text[/line-through]'; в блоке Posting/Replying (здесь описываются все подсказки к кнопкам ВВ-кода). То же можно повторить и для файла, содержащего русский язык, если форум у вас работает на двух языках: открываем language/lang_russian/lang_main.php, находим блок Posting/Replying и добавляем в него строку $lang['bbcode_n_help'] = 'Перечеркнутый текст: [line-through]текст[/line-through] (alt+n)';. Сохраняем и закрываем документ.

Модификация phpBB
Пример использования нового тега для форматирования текста перечеркиванием

Таким образом, мы получили полноценный мод, который может использоваться на любом форуме на основе phpBB. Для того чтобы каждый веб-мастер мог установить его, нужно оформить инструкцию по установке согласно общепринятым требованиям.

Оформление инструкций по общепринятым требованиям позволит веб-мастерам в любой точке мира использовать созданный мод

##############################################################
## MOD Title: Additional BB-tag for line-through decoration
## (Название мода: Дополнительный ВВ-тег для оформления текста перечеркиванием)
## MOD Author: Angie <angieable@gmail.com> (Angie Walker) http://maxybaby.net.ua
## (Информация об авторе: имя <адрес электронной почты> (настоящее имя или ник) адрес вашего сайта)
## MOD Description: Adds [line-through][/line-through] BBCode tags for text decoration.
## Makes text marked with <span style="text-decoration: line-through"></span>
## (Краткая информация о новом моде)
## MOD Version: x.x.x
## (Версия мода)
##
## Installation Level: Easy
## (Сложность установки, может быть Easy, Intermediate или Advanced)
## Installation Time: 10 Minutes
## (Сколько времени занимает установка)
## Files To Edit: includes/bbcode.php, templates/subSilver/bbcode.tpl,
## templates/subSilver/posting_body.tpl, language/lang_english/lang_main.php,
## language/lang_russian/lang_main.php
## (Файлы, нуждающиеся в изменении)
## Included Files: none
## (Список прилагаемых файлов)
##############################################################
## Author Notes:
## (Примечания автора)
##
##############################################################
## MOD History:
##
## YYYY-MM-DD — Version x.x.x
## — version notes go here
## (История вносимых изменений)
##
##############################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
## (Стандартное напоминание о необходимости бэкапа)
##############################################################

#
#-----[ OPEN ]------------------------------------------
#
includes/bbcode.php

#
#-----[ FIND ]------------------------------------------
#
// [i] and [/i] for italicizing text.
$text = str_replace("[i:$uid]", $bbcode_tpl['i_open'], $text);
$text = str_replace("[/i:$uid]", $bbcode_tpl['i_close'], $text);

#
#-----[ AFTER, ADD ]------------------------------------
#
// [line-through] and [/line-through] for line-through decorated text.
$text = str_replace("[line-through:$uid]", $bbcode_tpl['line-through_open'], $text);
$text = str_replace("[/line-through:$uid]", $bbcode_tpl['line-through_close'], $text);

#
#-----[ FIND ]------------------------------------------
#
// [i] and [/i] for italicizing text.
$text = preg_replace("#\[i\](.*?)\[/i\]#si", "[i:$uid]\\1[/i:$uid]", $text);

#
#-----[ AFTER, ADD ]------------------------------------
#
// [line-through] and [/line-through] for line-through text.
$text = preg_replace("#\[line-through\](.*?)\[/line-through\]#si", "[line-through:$uid]\\1[/line-through:$uid]", $text);

#
#-----[ OPEN ]------------------------------------------
#
templates/subSilver/bbcode.tpl

#
#-----[ FIND ]------------------------------------------
#
<!-- BEGIN i_open --><span style="font-style: italic"><!-- END i_open -->
<!-- BEGIN i_close --></span><!-- END i_close -->

#
#-----[ AFTER, ADD ]------------------------------------
#
<!-- BEGIN line-through_open --><span style="text-decoration: line-through"><!-- END line-through_open -->
<!-- BEGIN line-through_close --></span><!-- END line-through_close -->

#
#-----[ OPEN ]------------------------------------------
#
templates/subSilver/posting_body.tpl

#
#-----[ FIND ]------------------------------------------
#
bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[code]','[/code]','[list]','[/list]','[list=]','[/list]',
'[img]','[/img]','[url]','[/url]','');

#
#-----[ INLINE, FIND ]----------------------------------
#
'[url]','[/url]',

#
#-----[ IN-LINE AFTER, ADD ]----------------------------
#
'[line-through]','[/line-through]',

#
#-----[ FIND ]------------------------------------------
#
<td><span class="genmed"><input type="button" class="button" accesskey="u" name="addbbcode4" value=" u " style="text-decoration: underline; width: 30px" onClick="bbstyle(4)" onMouseOver="helpline('u')" /></span></td>

#
#-----[ AFTER, ADD ]------------------------------------
#
<td><span class="genmed"><input type="button" class="button" accesskey="n" name="addbbcode18" value=" lt " style="text-decoration: line-through; width: 30px" onClick="bbstyle(18)" onMouseOver="helpline('n')" /></span></td>

#
#-----[ FIND ]------------------------------------------
#
f_help = "{L_BBCODE_F_HELP}";

#
#-----[ AFTER, ADD ]------------------------------------
#
n_help = "{L_BBCODE_N_HELP}";

#
#-----[ OPEN ]------------------------------------------
#
language/lang_english/lang_main.php

#
#-----[ FIND ]------------------------------------------
#
$lang['bbcode_f_help'] = 'Font size: [size=x-small]small text[/size]';

#
#-----[ AFTER, ADD ]------------------------------------
#
$lang['bbcode_n_help'] = 'Line-through decorated text: [line-through]text[/line-through] (alt+n)';

#
#-----[ OPEN ]------------------------------------------
#
language/lang_russian/lang_main.php

#
#-----[ FIND ]------------------------------------------
#
$lang['bbcode_f_help'] = 'Font size: [size=x-small]small text[/size]';

#
#-----[ AFTER, ADD ]------------------------------------
#
$lang['bbcode_n_help'] = 'Перечеркнутый текст: [line-through]текст[/line-through] (alt+n)';

#
#-----[ SAVE/CLOSE ALL FILES ]--------------------------
#
#EoM

Теперь, следуя нашим указаниям, оформленным подобным образом, любой веб-мастер сможет расширить функциональность своего форума добавлением этого тега.




Скоро на сайте

  • Wordpress

    Серия статей о плагинах к движку WordPrress
  • AJAX

    Проекты и продукты, ориентированные на AJAX
  • Новые сервисы Google

    Обзор новых сервисов Google
 

Copyright © 2003—2018 Все права защищены

При использовании материалов сайта ссылка на hostinfo.ru обязательна

  • хостинг от .masterhost
  • Rambler's Top100