Strict Standards: Resource ID#35 used as offset, casting to integer (35) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#38 used as offset, casting to integer (38) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Расширение тега HIDE [2]
ТвойWeb » » Моды, хаки, скины и дополнения » Расширение тега HIDE

Страниц (4): « 1 [2] 3 4 »
 

11. CaptainFlint - 16 Сентября, 2005 - 06:54:29 - перейти к сообщению
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 на любое нравящееся вам число. Более того, можно это значение вынести в настройки админ-панели...
12. nokia6230 - 16 Сентября, 2005 - 08:53:01 - перейти к сообщению
CaptainFlint пишет:
можно это значение вынести в настройки админ-панели...

нука-нука...
13. CaptainFlint - 16 Сентября, 2005 - 09:19:24 - перейти к сообщению
nokia6230 пишет:
нука-нука...

Ну это я так быстро не напишу - пока что не настолько поднаторел в этом деле. Надо сначала у себя реализовать, тестануть, потом только выкладывать... Улыбка

Собственно, у себя на сайте я уже кое-какие вещи перенёс в настройки админ-центра: например, опция запрета чтения форума незалогиненным пользователям, опция разрешения просмотра приаттаченных файлов через модуль ListAttachedFiles (т.е. разрешать смотреть всем пользователям или только админам), опция включения/выключения мода Guest Identification, настройка ширины таблиц форума (те самые 95% во многих шаблонах скина Original)... В данном случае вообще ничего сложного быть не должно: добавить новый элемент в массив $exbb в data/board_info.tpl, да в шаблонах админ-центра прописать строчку таблицы с этой настройкой, плюс чуть-чуть кода подправить. Работа не творческая, а скорее, рутинная. Улыбка
14. pyccak - 16 Сентября, 2005 - 18:32:12 - перейти к сообщению
короче я запутался Огорчение
15. CaptainFlint - 16 Сентября, 2005 - 18:50:02 - перейти к сообщению
pyccak пишет:
короче я запутался

В чём? Просто попытайся сначала чётко сформулировать, что тебе нужно...
16. TvoyWeb - 16 Сентября, 2005 - 19:00:31 - перейти к сообщению
CaptainFlint
Ну там в коде я просто запарился и не поменял в одном месте $arr[2] на $arr[1].
По поводу поднять выше, согласен. Я же наспех писал Улыбка Думаю простите мне эти ошибки Улыбка Подмигивание
17. CaptainFlint - 17 Сентября, 2005 - 15:41:32 - перейти к сообщению
TvoyWeb пишет:
Думаю простите мне эти ошибки

О чём речь! Улыбка

Кстати, я тут подумал, наверное, лучше написать рег. выражение чуточку по-другому:
CODE:
$post = preg_replace_callback("#\[hide(?:=([0-9]+)|)\](.+?)\[/hide\]#is", 'reg_exp_callback', $post);
//                                                ^^^

Заменил =([0-9]+))* на =([0-9]+)|) - как-то красивее. Улыбка Понятно, что вряд ли кто будет писать hide=10=20, но всё же поприятнее.
18. TvoyWeb - 17 Сентября, 2005 - 16:00:04 - перейти к сообщению
CaptainFlint пишет:
но всё же поприятнее.

Абсолютно солидарен!
19. nokia6230 - 18 Сентября, 2005 - 09:35:58 - перейти к сообщению
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Улыбка
20. pyccak - 18 Сентября, 2005 - 14:43:21 - перейти к сообщению
все работает спасибо БОЛЬШОЕ и скрипт нужный Улыбка

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0408]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33