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/</</g; $membertitle =~ s/>/>/g; $membertitle =~ s/"/"/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 |
|