Страниц (4): « 1 [2] 3 4 » |
|
Описание: Скрытый текст виден всем кто оставил больше 10 сообщений |
Поиск в теме | Версия для печати |
CaptainFlint |
Отправлено: 16 Сентября, 2005 - 06:54:29
|
Junior Member
Покинул форум
Сообщений всего: 65
Дата рег-ции: Май 2005
Откуда: Москва
Карма 0
|
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>";
}
}
Для ограничения числа постов надо всего лишь во второй строчке этого блока:
CODE: if (empty($arr[1]) || $arr[1] == 0)
$arr[1] = 0;
заменить 0 на любое нравящееся вам число. Более того, можно это значение вынести в настройки админ-панели... |
|
|
CaptainFlint |
Отправлено: 16 Сентября, 2005 - 09:19:24
|
Junior Member
Покинул форум
Сообщений всего: 65
Дата рег-ции: Май 2005
Откуда: Москва
Карма 0
|
nokia6230 пишет:нука-нука...
Ну это я так быстро не напишу - пока что не настолько поднаторел в этом деле. Надо сначала у себя реализовать, тестануть, потом только выкладывать...
Собственно, у себя на сайте я уже кое-какие вещи перенёс в настройки админ-центра: например, опция запрета чтения форума незалогиненным пользователям, опция разрешения просмотра приаттаченных файлов через модуль ListAttachedFiles (т.е. разрешать смотреть всем пользователям или только админам), опция включения/выключения мода Guest Identification, настройка ширины таблиц форума (те самые 95% во многих шаблонах скина Original)... В данном случае вообще ничего сложного быть не должно: добавить новый элемент в массив $exbb в data/board_info.tpl, да в шаблонах админ-центра прописать строчку таблицы с этой настройкой, плюс чуть-чуть кода подправить. Работа не творческая, а скорее, рутинная. |
|
|
nokia6230 |
Отправлено: 18 Сентября, 2005 - 09:35:58
|
Super Member
Покинул форум
Сообщений всего: 522
Дата рег-ции: Февр. 2005
Откуда: Germany
Карма 0
|
pyccak пишет:короче я запутался
Зайди у себя в файл lib.php и удали там вот такой код:
CODE:if ($exbb['reged'])
{
$post = preg_replace( "#\[hide\](.+?)\[/hide\]#is", "<span class=small>Скрытый текст:</span><table cellpadding=3 cellspacing=0 width=85% class=hide_table><tr><td class=hide_td>$1</td></tr></table>", $post );
}
else
{
$post = preg_replace( "#\[hide\](.+?)\[/hide\]#is", "<span class=small><font color=red>[ Скрытый текст. Для прочтения необходима <a href=\"register.php\">регистрация</a>! ]</font></span>", $post );
}
Потом найди вот такой код:
CODE:function setsmiles($sm) {
static $sm_code,$sm_img;
if( empty($sm_code) ) {
$smilies = get_file('./data/smiles.php');
$sm_code = array();
$sm_img = array();
foreach ($smilies as $code=>$data) {
$code = str_replace(')','\)',$code);
$code = str_replace('(','\(',$code);
$sm_code[] = "'$code'";
$sm_img[] = '<img src="./im/emoticons/'.$data['img'].'" border="0">';
}
}
#$sm = str_replace('"','"',$sm);
return preg_replace($sm_code,$sm_img,$sm);
}
И перед ним вставь вот такой вот код:
CODE:function reg_exp_callback($arr)
{
global $exbb,$lang,$inmembmod,$inuser;
if (empty($arr[1]) || $arr[1] == 10)
$arr[1] = 10;
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:$post = preg_replace( "#\[u\](.+?)\[/u\]#is", "<u>\\1</u>", $post );
Вставь сразу после него:
CODE:
$post = preg_replace_callback("#\[hide(?:=([0-9]+))*\](.+?)\[/hide\]#is", 'reg_exp_callback', $post);
Потом иди в файл lang.php и вставляй следующий код:
CODE:$lang['HiddenText'] = 'Скрытый текст:';
$lang['ToRead'] = 'Для прочтения необходимо';
$lang['Register'] = ' <a href="register.php">зарегистрироваться</a>';
$lang['And'] = ' и';
$lang['CollectPosts'] = ' набрать не менее %d сообщений';
Вот и всё....!!!
Только перед тем как все это делать, лучше сохрани свой старый lib.php
|
|
|
|
Поиск в теме | Версия для печати |
Страниц (4): « 1 [2] 3 4 » |
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0, скрытых: 0) |
« Моды, хаки, скины и дополнения » |
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
|
|
|