Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Guest RSS-Bot

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

Recommended Posts

Guest 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 отпарсенный текст сохраняется в БД и дальше при выводе сообщений запрашивается из БД и выдаётся в готовом виде прямо на страничку.

Share this post


Link to post
Share on other sites
Guest 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: К посту прикреплены вложения, но посмотреть Вы их можете, только открыв статью в Форуме.

Share this post


Link to post
Share on other sites
Guest 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] );}}

 

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

== - равно

!= - не равно

> - больше

< - меньше

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

 

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

Share this post


Link to post
Share on other sites
Guest 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'] - является ли текущий парсинг обработкой подписи юзера

Share this post


Link to post
Share on other sites
Guest RSS-Bot

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

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

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...