Перейти к контенту
  • 0

private line BB code


Spear

Вопрос

Адрес мода:

http://mods.invisionize.com/db/index.php/f/3997

 

Проблема в чем:

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

 

То есть постим:

[private=test1]hello[/private]

...

[private=test2]bye[/private]

 

а сообщение отпарсится как

 

Приват для test1: hello

...

Приват для test1: hello

 

Проблема именно при выводе сообщения пользователям, т.к. в базе все хранится правильно.

Вот сам код парсинга с которым проблемы (я его чуток "модифицировал" - теперь один приватный текст может отправляться нескольким людям - просто перечислить их ники через запятую):

это тот код, который стоит в topics.php

 

//--------------------------------------------------------------
// Private Line BBCode
//--------------------------------------------------------------

					preg_match_all( "#<!--private&(.+?)-->(.+?)<!--endprivate-->#", $row['post'], $matches, PREG_SET_ORDER );
					for($i=0;$i < count($matches);$i++)
					{

						$PrivateTo = explode(",",$matches[$i][1]);
							if(in_array($ibforums->member['name'],$PrivateTo) || $ibforums->member['mgroup'] == 4)
							{
									$row['post'] = preg_replace( "#<!--private&(.+?)-->(.+?)<!--endprivate-->#", "<DIV style=\"COLOR: red\">Приват (для ".$matches[$i][1].")</DIV>
									<DIV
		style=\"BACKGROUND:white;BORDER-RIGHT:red 1px solid;PADDING-RIGHT:10px;BORDER-TOP:red 1px solid;MARGIN-TOP:3px;PADDING-LEFT:10px;PADDING-BOTTOM:10px;BORDER-LEFT:red 1px solid;PADDING-TOP:10px;BORDER-BOTTOM:red 1px solid\"><font color=\"red\">".$matches[$i][2]."</font></DIV>", $row['post']);
							}
							else
							{
									$row['post'] = preg_replace( "#<!--private&(.+?)-->(.+?)<!--endprivate-->#", "", $row['post'] );
							}
					}

я ума не приложу какого черта оно не парсит как нужно. Такое чувство, что совершается только 1 круг в цикле.

Буду очень благодарен, если кто-нибудь из знающих движок ИПБ и его капризы сможет помочь.

Ссылка на комментарий
Поделиться на других сайтах

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

  • 0

...

$txt = preg_replace( "#\[private\s*=\s*(.*?)\s*\](.*?)\[\/private\]#ie", "\$this->regex_private_messages('\\2','\\1')", $txt );

...


function regex_private_messages($txt, $user_name) {
global $ibforums, $std;

$user_name	= trim($user_name);
$txt		= trim($txt);

if ( !$user_name or !$txt or !$ibforums->member['id'] or $user_name != $ibforums->member['name'] )
{
return "";
}

$txt 		= $std->clean_value($txt);

return "[quote=Приватное сообщение Вам]".$txt."[/quote]";

}

 

после вызова этой функции надо вызвать парсинг BB кодов.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

edit

 

Тут была ересь.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Не понимаю. Та-же ошибка.

 

Spear

разобрался?..

 

Song

Это функция для post_parser? Вместо той-что есть? Она учитывает то что написал Spear?

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Так как насчёт объяснить понятней? Что значит "после вызова этой функции надо вызвать парсинг BB кодов."
Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.