DrNets пишет:
а теперь спросим у TvoyWeb - безопасно ли это? т.к с файлом lib.php лучше не шутить
TvoyWeb пишет:
Думаю будешь непротив небольшой модификации твоего кода.
Не только не против, но и поприветствую! Собственно, для этого и выложил: чтобы оценили, исправили, улучшили...
Про $inuser'а действительно ступил, спасибо.
По поводу изменённого кода есть пара замечаний.
1. При форматировании числа сообщений надо брать $arr[1], а не [2].
2. Фраза "зарегистрироваться и набрать не менее 0 сообщений" выглядит очень некрасиво, поэтому я и сделал в первоначальном варианте раздельно языковые конструкции Register и RegisterAnd.
3. Это уже альтернативно, но, мне кажется, что лучше тег [hide] сделать по умолчанию требующим только регистрацию, а уж если указано число постов - то только тогда ограничение по числу постов.
4. Присваивание $arr[1] для пустого количества надо перенести выше, а то для незарегистрированного пользователя при использовании тега [hide] (без числа постов) будет указано всегда 0, даже если по умолчанию 50 (как в приведённом коде). Итого, вариант получается такой (мой вариант, где [hide] не ограничивает число постов; ну и отформатировал ещё чуток ):
CODE:
$lang['HiddenText'] = 'Скрытый текст:';
$lang['ToRead'] = 'Для прочтения необходимо';
$lang['Register'] = ' <a href="register.php">зарегистрироваться</a>';
$lang['And'] = ' и';
$lang['CollectPosts'] = ' набрать не менее %d сообщений';
function reg_exp_callback($arr)
{
global $exbb,$lang,$inmembmod,$inuser;
if (empty($arr[1]) || $arr[1] == 0)
$arr[1] = 0;
if (!$exbb['reged'])
{
$hidetext = $lang['HiddenText'].' '.$lang['ToRead'].$lang['Register'];
if ($arr[1] > 0)
$hidetext .= $lang['And'].sprintf($lang['CollectPosts'], $arr[1]);
return "<BR><span class=small><font color=red>[$hidetext!]</font></span>";
}
if (($inuser['posts'] >= $arr[1]) || $inmembmod)
{
return "<BR><span class=small>$lang[HiddenText]</span><table cellpadding=3 cellspacing=0 width=85% class=hide_table><tr><td class=hide_td>$arr[2]</td></tr></table>";
}
else
{
$hidetext = $lang['HiddenText'].' '.$lang['ToRead'].sprintf($lang['CollectPosts'], $arr[1]);
return "<BR><span class=small><font color=red>[$hidetext!]</font></span>";
}
}
$lang['ToRead'] = 'Для прочтения необходимо';
$lang['Register'] = ' <a href="register.php">зарегистрироваться</a>';
$lang['And'] = ' и';
$lang['CollectPosts'] = ' набрать не менее %d сообщений';
function reg_exp_callback($arr)
{
global $exbb,$lang,$inmembmod,$inuser;
if (empty($arr[1]) || $arr[1] == 0)
$arr[1] = 0;
if (!$exbb['reged'])
{
$hidetext = $lang['HiddenText'].' '.$lang['ToRead'].$lang['Register'];
if ($arr[1] > 0)
$hidetext .= $lang['And'].sprintf($lang['CollectPosts'], $arr[1]);
return "<BR><span class=small><font color=red>[$hidetext!]</font></span>";
}
if (($inuser['posts'] >= $arr[1]) || $inmembmod)
{
return "<BR><span class=small>$lang[HiddenText]</span><table cellpadding=3 cellspacing=0 width=85% class=hide_table><tr><td class=hide_td>$arr[2]</td></tr></table>";
}
else
{
$hidetext = $lang['HiddenText'].' '.$lang['ToRead'].sprintf($lang['CollectPosts'], $arr[1]);
return "<BR><span class=small><font color=red>[$hidetext!]</font></span>";
}
}
Для ограничения числа постов надо всего лишь во второй строчке этого блока:
CODE:
if (empty($arr[1]) || $arr[1] == 0)
$arr[1] = 0;
$arr[1] = 0;
заменить 0 на любое нравящееся вам число. Более того, можно это значение вынести в настройки админ-панели...