«Поле, русское поле...»
Тег для скрытия содержания от гостей
Задача:

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

Решение:

Правим файл system/functions.php в функции sed_bbcode()

Код:
function sed_bbcode($text)
{
global $L, $skin, $sys, $cfg, $sed_groups;


добавляем глобальную переменную $usr

Код:
function sed_bbcode($text)
{
global $L, $skin, $sys, $cfg, $usr, $sed_groups;


Где нибудь дальше внутри функции sed_bbcode() добавляем:

Код:
// скрытый от гостей текст
if ($usr['level'] > 0 && $usr['profile']['user_postcount'] > 5 )
{
$bbcodes = array('\\[hide\\]([^\\[]*)\\[/hide\\]' => '\\1');
}
else
{
$bbcodes = array('\\[hide\\]([^\\[]*)\\[/hide\\]' => '<div class="hiddentext">'.$L['HiddenText'].'</div>');
}
foreach($bbcodes as $bbcode => $bbcodehtml)
{ $text = eregi_replace($bbcode,$bbcodehtml,$text); }


В языковой файл system/lang/ru/main.lang.php добавляем строку:

Код:
$L['HiddenText'] = "Скрытое содержание, доступно только <a href=\"users.php?m=register\">зарегистрированным</a> и <a href=\"users.php?m=auth\">авторизованным</a> посетителям, c более чем пятью сообщениями в форуме."; // New for tag [hide]


В css файл скина добавляем строчку следующего образца:

Код:
.hiddentext { background-color:#191919; border:1px dashed #cc2929; padding:8px; margin:12px; }


Profit!





Далее нужно добавить тег в панельку текстбоксера:

открываем plugins/textboxer2/inc/textboxer2.inc.php и находим

Код:
4,
'quote',
'spoiler',
'code',
'list',
'hr',
'spacer',
'ac',
'p',
'}',


добавляем между 'quote', и 'spoiler', строчку:

Код:
4,
'quote',
'hide',
'spoiler',
'code',
'list',
'hr',
'spacer',
'ac',
'p',
'}',


Потом ещё между:

Код:
$res['quote'] = array('[quote]', '[/quote]', 10);
$res['spoiler'] = array('[spoiler]', '[/spoiler]', 10);


Добавляем:

Код:
$res['quote'] = array('[quote]', '[/quote]', 10);
$res['hide'] = array('[hide]', '[/hide]', 10);
$res['spoiler'] = array('[spoiler]', '[/spoiler]', 10);


В языковой файл system/lang/ru/main.lang.php добавляем строки:

Код:
$L['bbcodes_hide'] = "Спрятать"; // для тега [hide]
$L['bbcodes_ex_hide'] = "Спрятать текст от гостей"; // для тега [hide]


Вуаля:






11.11.2011, Amro:

понравилось, но можно сделать покруче

чтоб ещё можно было писать мин. сообщении прямо в теге ббкода по типу [hide=5][/hide]

во как мона навертеть (тока не проверял):

Код:
preg_match_all("/\[hide=([\d]*)\].+?\[\/hide\]/i", $text, $tagh);
  foreach ($tagh[1] as $min_posts) {
   if ($min_posts => $usr['profile']['user_postcount']) {
        $bbcodes = array('\\[hide='.$min_posts.'\\]([^\\[]*)\\[/hide\\]' => '\\1');
    }
    else
    {
        $bbcodes = array('\\[hide='.$min_posts.'\\]([^\\[]*)\\[/hide\\]' => '<div class="hiddentext">'.$L['HiddenText'].'</div>');
    }
  }
 
  foreach($bbcodes as $bbcode => $bbcodehtml)
{ $text = eregi_replace($bbcode,$bbcodehtml,$text); }


[ написать отзыв ]
Ноябрь →
2011
пн
14
вс
13
сб
12
пт
чт
10
ср
9
вт
8
пн
7
вс
сб
пт
чт
ср
2
вт
1
Октябрь →
2011
пн
31
вс
сб
пт
28
чт
27
ср
26
вт