Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Гость RSS-Bot

Важное с Sysman.Ru: Включить/Отключить определённый BB тег для какой-либо группы

Рекомендованные сообщения

Гость RSS-Bot

Song:

IPB хранит в БД сообщения, добавляемые в форум в HTML структуре.

Перед тем как сообщение попадёт в БД, оно конвертируется (парсится) в html, т.е. например:

 

[b]жирный[/b] = <b>жирный</b>

 

Выполняет это преобразование парсер. Его класс находится в отдельном файле.

 

Для версии 1.x - это файл post_parser.php

Для версии 2.x - это файлы class_bbcode.php, class_bbcode_legacy.php (и ещё некоторые).

 

После преобразования в html отпарсенный текст сохраняется в БД и дальше при выводе сообщений запрашивается из БД и выдаётся в готовом виде прямо на страничку.

Поделиться сообщением


Ссылка на сообщение
Гость RSS-Bot

Song: Парсинг BB тегов вполняется обычными регулярными выражения php, суть работы которых сводится к простому изменению одного текста на другой (см. выше). Отличаются они только сложностью разработки, некоторые теги простые, например вышеупомянутый болд, а некоторые - сложные, требуют различных проверок входящих параметров и вместо непосредственной замены одного текста на другой, вызывают специальную call-back функцию, результат выполнения которой после промежуточных шагов всё-равно сведётся к замене одного текста на другой или без замены онного (например, в случае ошибки в теге).

 

Но в общем случае в коде форума регулярное выражение BB тега выглядит как одна/две/три строчки и его легко можно найти в тексте:

 

и т.д.

 

Например, BB тег болда выглядит так:

 

[color=#048284]$txt[/color] = preg_replace( "#\[b\](.+?)\[/b\]#is", "<b>\\1</b>", [color=#048284]$txt[/color] );

Вам помогут даже англоязычные комментарии создателей форума.

 

В коде выше я выделил части регулярного выражения, по которым можно понять что это тег .

При поиске других BB тегов вы можете воспользоваться этой частью регулярного выражения.

Например, регулярное выражение тега [CОDE] выглядит как:

[color=#048284]$txt[/color] = preg_replace( "#\[cоde\](.+?)\[/cоde\]#ies", "\$this->regex_code_tag( '\\1' )", [color=#048284]$txt[/color] );

Для ссылок чуть сложнее:

[color=#048284]$txt[/color] = preg_replace( "#(^|\s)((http|https|news|ftp)://\w+[^\s\[\]]+)#ie"  , "\$this->regex_build_url(array('html' => '\\2', 'show' => '\\2', 'st' => '\\1'))", [color=#048284]$txt[/color] );

Тег

%5bcolor="#048284"%5d$txt%5b/color%5d%20=%20preg_replace(%20"#\%5burl\%5d(\S+?)\%5b/url\%5d#ie",%20"\$this->regex_build_url(array('html'%20=>%20'\\1',%20'show'%20=>%20'\\1'))",%20%5bcolor="#048284"%5d$txt%5b/color%5d%20);

и%20т.д.

 

%5bcolor="%20gray%20fontsize%2010px%20lineheight%20110"%5d%5bb%5dSong_Bot:%20К%20посту%20прикреплены%20вложения,%20но%20посмотреть%20Вы%20их%20можете,%20только%20открыв%20статью%20в%20Форуме.%5b/color%5d

 

%5burl="http://www.sysman.ru/"%5dhttp://www.sysman.ru/" target="_blank">:

[color=#048284]$txt[/color] = preg_replace( "#\[url\](\S+?)\[/url\]#ie", "\$this->regex_build_url(array('html' => '\\1', 'show' => '\\1'))", [color=#048284]$txt[/color] );

и т.д.

 

Song_Bot: К посту прикреплены вложения, но посмотреть Вы их можете, только открыв статью в Форуме.

Поделиться сообщением


Ссылка на сообщение
Гость RSS-Bot

Song: А теперь вернёмся к главному вопросу: как ограничить использование BB тегов в зависимости от определённых условий.

 

 

Если вы хотите ограничить вообще т.е. убрать парсинг BB тега, то достаточно просто закомментировать соответствующее регулярное выражение, т.е. например вот так:

[color=green]// $txt = preg_replace( "#\[b\](.+?)\[/b\]#is", "<b>\\1</b>", $txt );[/color]

BB тег перестанет обрабатываться и текст этого тега останется в виде bb тега.

 

 

Если вы хотите ограничить использование BB тега по какому-то условию, то нужно прописать условие if для этого тега. Т.е. на примере болда это будет выглядеть так:

[b]if[/b] ( условие ){   [color=#048284]$txt[/color] = preg_replace( "#\[b\](.+?)\[/b\]#is", "<b>\\1</b>", [color=#048284]$txt[/color] );}}

 

<условие> - это определённая логическая конструкция. Например

== - равно

!= - не равно

> - больше

< - меньше

и др. (это самые простые)

 

с участием определённых нужных вам переменных.

Поделиться сообщением


Ссылка на сообщение
Гость RSS-Bot

Song: Сейчас приведу некоторые переменные IPB которые вы можете использовать в парсере для задавания <условия>.

 

Группа юзера:

Цитата (1.x)
[color=#048284]$ibforums[/color]->member['mgroup']

Цитата (2.x)
[color=#048284]$this[/color]->ipsclass->member['mgroup']

 

id юзера:

Цитата (1.x)
[color=#048284]$ibforums[/color]->member['id']

Цитата (2.x)
[color=#048284]$this[/color]->ipsclass->member['id']

 

Количество постов юзера:

Цитата (1.x)
[color=#048284]$ibforums[/color]->member['posts']

Цитата (2.x)
[color=#048284]$this[/color]->ipsclass->member['posts']

 

 

В версии 1.x форума вы можете использовать также входяшие переменные фукнции:

  • $in['TEXT'] - текст обрабатываемого сообщения
  • $in['SMILIES'] - обрабатывать ли в сообщении смайлики
  • $in['CODE'] - обрабатывать ли в сообщении BB теги
  • $in['SIGNATURE'] - является ли текущий парсинг обработкой подписи юзера

Поделиться сообщением


Ссылка на сообщение
Гость RSS-Bot

Song: Пожалуйста имейте ввиду, что изменения, которые вы ожидаете, внося изменения в парсер форума, вступят в силу только для новых постов на форуме.

Для подписи - только при следующем её обновлении через профиль юзера.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...