Дополнительные BB-CODE теги

6.87K
.
Дописал дополнительные BBCODE к основным. Кому интересно забираем и устанавливаем.

Перечисление:
[sub]текст[/sub] - подстрочный текст, аналог тэга <sub>;
[sup]текст[/sup] - надстрочный текст, аналог тэга <suр>;
[*]текст - аналог тега <li/>;
[hr] - разделительная черта;
[offtop]текст[/offtop] - оффтоп текст;
[color=цвет]текст[/color] - цветной текст, причем цвет задаем сами;
[hide]текст[/hide] - тест видимый только для зарегистрированных пользователей;
[ghide]текст[/ghide] - тест видимый для администрации и для пользователя написавшего сообщение;

Собственно код который необходимо добавить в файл incfiles/func.php

// Это добавляем в функцию tags()
	$var = preg_replace('#\[color=([\#a-zA-Z0-9]+?)\](.*?)\[/color\]#si', '<span style="color:\1">\2</span>', $var);
    $var = preg_replace('#\[sub\](.*?)\[/sub\]#si', '<span style="vertical-align:sub">\1</span>', $var);
    $var = preg_replace('#\[sup\](.*?)\[/sup\]#si', '<span style="vertical-align:super">\1</span>', $var);
    $var = preg_replace('#\[offtop\](.*?)\[/offtop\]#si', '<div style="color:#ccc;margin:1px;padding:2px;border:1px dashed #ccc">\1</div>', $var);
    $var = preg_replace_callback('#\[hide\](.*?)\[/hide\]#si', 'bbHide', $var);
    $var = preg_replace_callback('#\[ghide\](.*?)\[/ghide\]#si', 'bbGHide', $var);
    $var = preg_replace('#\[\*\]#si', '<li/>', $var);
    $var = preg_replace('#\[hr\]#si', '<hr style="margin:2px;border:0;border-bottom:1px dashed #aaa"/>', $var);


// Добавляем после функции tags() следующие две
function bbHide($hide) {
	// Hide function by SunRise
	global $user_id;
	if(!$user_id)
	{
		return '<div style="background:#EAF1F4;border:1px solid #84BEE6;color:#2383A3;margin:2px;padding:2px">Скрытый текст! Могут прочесть только зарегистрированные пользователи.</div>';
	}
	else
	{
		return '<div style="background:#EAF1F4;border:1px solid #84BEE6;color:#2383A3;margin:2px;padding:2px">' . $hide[1] . '</div>';
	}
}

function bbGHide($ghide) {
	// gHide function by SunRise
	global $user_id, $rights;
	$r = mysql_query("SELECT `user_id` FROM `forum` WHERE `text` LIKE '%\[ghide\]" . mysql_real_escape_string($ghide[1]) . "\[\/ghide\]%' AND `type`='m' LIMIT 1");
	$r = mysql_fetch_array($r);
    if($user_id && $user_id == $r['user_id'] || $rights>=7)
	{
		return '<div style="background:#FFDFD7;border:1px solid #CF3603;color:#B62703;margin:2px;padding:2px">' . $ghide[1] . '</div>';
	}
	else
	{
		return '<div style="background:#FFDFD7;border:1px solid #CF3603;color:#B62703;margin:2px;padding:2px">Скрытый текст! Могут прочесть только администрация и пользователь написавший сообщение.</div>';
	}
}
Прикрепленные файлы:
.
Круто.Ща разберусь с денвером поставлю протестю.
.
аkа ПьяНый Ангел
молодец конечно, но вот функция ghid или как там - ужас полный%) если часто использовать этот тег то будет куча циклических запросов, да ещё и с LIKE
.
FlySelf, Есть альтернатива?
.
аkа ПьяНый Ангел
переждавать в теги ид пользователя, написавшего сообщение
.
Если чел ошибется и введет например [ghide=26][/ghide] вместо 25 то он не увидит сообщения своего, а 25 прочитает это не есть хорошо.
.
аkа ПьяНый Ангел
я не про это говорил, можно попробовать передавать именно в функцию, то есть tags($a, $user_id); ну или же твой вариант, только ид юзера подставлять автоматически, при записи сообщения
.
то есть написать допустим тег [id][/id] будет вставляться функцией ghide в сообщение. Этот тег для отображения не выводить. А сравнения id проводить с помощью регулярки.
.
аkа ПьяНый Ангел
неосилил тебе ваще) просто когда юзер пишет тег [ghide][/ghide] при записи сообщения обрабатывать его функцией и заменять на [ghide=$user_id][/ghide]
.
Я это понял, и имел в виду что тег id будет писать сама функция дабы сравнивать после.
Всего: 269