Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Статусы пользователей: более легкое решение

Модерирует : Antuan

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
По мотивам тем:  
http://forum.ru-board.com/topic.cgi?forum=21&topic=1375#1
http://forum.ru-board.com/topic.cgi?forum=21&topic=0867#1
http://forum.ru-board.com/topic.cgi?forum=21&topic=1432#1
 
 
 
Итак, речь идет о статусах вида Newbie, member и т.д.
 
С какого количества поста присваивается тот ли иной статус и какой именно прописано в файле data/membertitles.cgi.
 
Вот пример дефолтного файла:
 

Код:
 
$mpostmark1 = "25";
$mtitle1 = "Newbie";
$mgraphic1 = "pips1.gif";
$mpostmark2 = "50";
$mtitle2 = "Junior Member";
$mgraphic2 = "pips2.gif";
$mpostmark3 = "100";
$mtitle3 = "Member";
$mgraphic3 = "pips3.gif";
$mpostmark4 = "150";
$mtitle4 = "Full Member";
$mgraphic4 = "pips4.gif";
$mpostmark5 = "250";
$mtitle5 = "Advanced Member";
$mgraphic5 = "pips5.gif";
$admingraphic = "pips6.gif";
$submit = "Submit";
1;
 

 
Это означает, что до 25 постов статус будет Newbie, до 50 - Джуниор мембер и т.д.
 
 
Так вот в чем дело.
 
Сейчас ситуация следующая. Статусы нужны в файле topic.cgi (выводится под аватаром) и profile.cgi (выводится в строке "Статус").
И в каждом из этих двух файлов происходит обработка на то, не забанен ли пользователь, и если забанен, то пишем "BANNED".
Кроме того, в профиле статус пишется всегда "Пользователь" или "moderator/администратор", соотвественно. Градиции по ньюбикам, мемберам, джуниормемберам и проч. нет.
 
 
Что я предлагаю?
Создать отдельную подпрограмму getmembertitle, которая будет только выводить профиль. И вызывать ее в топике и в профиле.
 
 
Вот как она выглядит:
 
 

Код:
 
sub getmembertitle {
 
  local($nametocheck) = @_;
  $nametocheck =~ s/ /\_/g;
   my $filetoopen = "$ikondir" . "members/$nametocheck.cgi";
  $filetoopen = &stripMETA($filetoopen);
        open(FILE,"$filetoopen");
        flock(FILE,1);
        $filedata = <FILE>;
        close(FILE);
($trash,$trash,$membertitle,$membercode,$numberofposts) = split(/\|/,$filedata);
 
if (($membercode eq "mo")||($membercode eq "ad")){
$membertitle="$membertitle" ;
}
else{ #start else

if($numberofposts > $mpostmark5){$mtitle = "$mtitle5";}
elsif ($numberofposts > $mpostmark4){$mtitle = "$mtitle4";}
elsif ($numberofposts > $mpostmark3){$mtitle = "$mtitle3";}
elsif ($numberofposts > $mpostmark2){$mtitle = "$mtitle2";}
else {$mtitle = "$mtitle1";}

if($membercode ne "banned"){
  $membertitle = $mtitle if (($membertitle eq "member") || ($membertitle eq "Пользователь"));
 }
 else{
 $membertitle = "BANNED";
 }
}#end else
 
    $membertitle =~ s/&lt;/</g;  
    $membertitle =~ s/&gt;/>/g;  
    $membertitle =~ s/&quot;/"/g;
 
 
} #end getmembertitle
 

 
Если вам нужны "пипсы" - красные тотечки такие рядом с ником (но лучше от них избавиться, о чем читайте в статье Ускорение работы IkonBoard V. 2. Часть I. ), то красная часть кода должна выглядить так:
 

Код:
 
 if    ($numberofposts > $mpostmark5) { $mtitle = "$mtitle5";  $membergraphic = "$mgraphic5"; }
        elsif ($numberofposts > $mpostmark4) { $mtitle = "$mtitle4";  $membergraphic = "$mgraphic4"; }
        elsif ($numberofposts > $mpostmark3) { $mtitle = "$mtitle3";  $membergraphic = "$mgraphic3"; }
        elsif ($numberofposts > $mpostmark2) { $mtitle = "$mtitle2";  $membergraphic = "$mgraphic2"; }
        else { $mtitle = "$mtitle1"; $membergraphic = "$mgraphic1"; }
 

 
 
Создаем эту подпрограммку и добавляет в файл ikon.lib например после подпрограммы getmemberstime (чтобы было логично).
 
Дальше берем topic.cgi, делаем его резервную копию и начинаем курочить.
 
Код:
 

Код:
       if    ($numberofposts > $mpostmark5) { $mtitle = "$mtitle5";  $membergraphic = "$mgraphic5"; }
        elsif ($numberofposts > $mpostmark4) { $mtitle = "$mtitle4";  $membergraphic = "$mgraphic4"; }
        elsif ($numberofposts > $mpostmark3) { $mtitle = "$mtitle3";  $membergraphic = "$mgraphic3"; }
        elsif ($numberofposts > $mpostmark2) { $mtitle = "$mtitle2";  $membergraphic = "$mgraphic2"; }
        else { $mtitle = "$mtitle1"; $membergraphic = "$mgraphic1"; }

 
удаляем.
 
Вместо него пишем код:
 

Код:
&getmembertitle($membername);

 
 
Далее я рекомендую не полениться и почитать статью Ускорение работы IkonBoard V. 2. Часть I., в котрой в числе прочего описано, как облегчить topic.cgi - один из основных и наиболее загруженный скрипток конференции. В этом случае можно будет удалить еще лтьвиную долю кода из этого файла. Например, зачем нужен номер аське в посте? Ну, не иначе как лишнюю нагрузку на сервер создавать.
 
Хорошо, оставим topic.cgi и идем в profile.cgi
 
После кода:
 

Код:
 
 $inmember =~ y! !_!; &set_up_guest() unless (-e $ikondir . 'members/'.$inmember.'.cgi');
 

 
Пишем:
 

Код:
 
##start в профить статусы нормально
$filetoopen = "$ikondir" . "members/$inmember.cgi";
&error("Пользователь не найден&Пользователь $inmember не зарегистрирован на нашей конференции") unless (-e $filetoopen);
 
&getmembertitle($inmember);  #Статусы выводим
#end
 

 
Этим мы проверили, есть ли такой юзер на конференции, если нет, то коректно написали "Сори, нет такого". И далее вызвали подпрограмму, которая ам статусы напишет. Еще раз призываю пипсы выкинуть.
 
Чуть выше находим строку:
 

Код:
 
  if ($membercode eq "banned") { $membertitle = "$ibtxt{'3010'}"; }

 
И выкидываем ее, не нужна она, у нас все подпрограмма сделает.
 
 
 
Вроде все. Кто смог разобраться, молодец
 
 
 
 
 
 

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 06:20 18-08-2004 | Исправлено: lynx, 06:23 18-08-2004
Wozik



Ёж
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lynx
чем тебе так пипсы не угодили?
если их заменить на что-нить более оригинальное и красивое, выходит вполне причтно на вид
неужели так сильно загрузится сервер от одной лишней проверки?
 

Всего записей: 589 | Зарегистр. 02-01-2003 | Отправлено: 18:07 18-08-2004
lynx



Advanced lynx
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Wozik
 
Там, во-первых, не одна проверка. Ну, да ладно, это конечно дело админа - оставлять пипсы с тормозами или убирать пипсы.

Всего записей: 11712 | Зарегистр. 08-05-2001 | Отправлено: 19:50 18-08-2004
Wozik



Ёж
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lynx
да просто народец такой ко мне ходит: главное красота, а не скорость
на то и смайлы прикрутил и аватары безразмерные сделал (ток не дал самим закачивать :Р )
 
а тормозов пока не заметно. наверное потому что конфа молодая слишком
..со временем скорее всего уберутся и пипсы и ещё что-нибудь

Всего записей: 589 | Зарегистр. 02-01-2003 | Отправлено: 16:45 20-08-2004 | Исправлено: Wozik, 16:47 20-08-2004
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » IkonBoard и другие форумы » Ikonboard v.2 » Статусы пользователей: более легкое решение


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru