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

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

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

Strict Standards: Resource ID#27 used as offset, casting to integer (27) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Расширение тега HIDE [2]
ТвойWeb ТвойWeb
Качественный Европейский хостинг
Форум для чайников
 Чат на форуме      Помощь      Поиск      Пользователи


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

> Описание: Скрытый текст виден всем кто оставил больше 10 сообщений
CaptainFlint
Отправлено: 16 Сентября, 2005 - 06:54:29
Post Id


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



Super Member


Покинул форум
Сообщений всего: 522
Дата рег-ции: Февр. 2005  
Откуда: Germany

Карма 0




CaptainFlint пишет:
можно это значение вынести в настройки админ-панели...

нука-нука...
 
 Top
CaptainFlint
Отправлено: 16 Сентября, 2005 - 09:19:24
Post Id


Junior Member


Покинул форум
Сообщений всего: 65
Дата рег-ции: Май 2005  
Откуда: Москва

Карма 0




nokia6230 пишет:
нука-нука...

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

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



Full Member


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2005  

Карма 0




короче я запутался Огорчение
 
 Top
CaptainFlint
Отправлено: 16 Сентября, 2005 - 18:50:02
Post Id


Junior Member


Покинул форум
Сообщений всего: 65
Дата рег-ции: Май 2005  
Откуда: Москва

Карма 0




pyccak пишет:
короче я запутался

В чём? Просто попытайся сначала чётко сформулировать, что тебе нужно...
 
 Top
TvoyWeb Администратор
Отправлено: 16 Сентября, 2005 - 19:00:31
Post Id



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




CaptainFlint
Ну там в коде я просто запарился и не поменял в одном месте $arr[2] на $arr[1].
По поводу поднять выше, согласен. Я же наспех писал Улыбка Думаю простите мне эти ошибки Улыбка Подмигивание
 
 Top
CaptainFlint
Отправлено: 17 Сентября, 2005 - 15:41:32
Post Id


Junior Member


Покинул форум
Сообщений всего: 65
Дата рег-ции: Май 2005  
Откуда: Москва

Карма 0




TvoyWeb пишет:
Думаю простите мне эти ошибки

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

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

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



Главный здесь


Покинул форум
Сообщений всего: 7072
Дата рег-ции: Нояб. 2003  
Откуда: Tashkent Uz

Карма 52




CaptainFlint пишет:
но всё же поприятнее.

Абсолютно солидарен!
 
 Top
nokia6230
Отправлено: 18 Сентября, 2005 - 09:35:58
Post Id



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Улыбка
 
 Top
pyccak
Отправлено: 18 Сентября, 2005 - 14:43:21
Post Id



Full Member


Покинул форум
Сообщений всего: 157
Дата рег-ции: Апр. 2005  

Карма 0




все работает спасибо БОЛЬШОЕ и скрипт нужный Улыбка
 
 Top
Страниц (4): « 1 [2] 3 4 »
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0, скрытых: 0)
« Моды, хаки, скины и дополнения »


Все гости форума могут просматривать этот раздел.
Только администраторы и модераторы могут создавать новые темы в этом разделе.
Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
 



Форум на AlfaSpace.NET


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

[Script Execution time: 0.04]     [ Gzipped ]