Sebastyan
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Нужно, чтобы гости постили под своими никами, но хак guest_name ставить не стал - велик не вмеру. Привожу свою версию. Что получаем: Гости могут отвечать в топиках под произвольными никами Гости могут начинать темы под произвольными никами Всё гостевые ники ("Guest" не исключение) подсвечиваются определённым цветом (по желанию текстовая приставка, см. P.P.S.) Ники гостей как латиницей, так и по-русски. Что не реализовано: Как на гл. странице, таки и в списке топиков любой ник гостя по-прежнему выводится как "Guest" Файл post.cgi: -------------- В "sub addreply" после строк: Код: sub addreply { # start routine ### Lets sort out the flood control, incase they used the back button... &getmember("$inmembername"); | добавить: Код: if ($userregistered eq "no") {$tempguest=$inmembername; $inmembername="Guest"; $userregistered=""; &getmember("$inmembername");} | Найти строки (ковыряем хак склейки постов): Код: $num = $totalthreadposts-1; ($inmembername_OLD, $topictitle_OLD, $postipaddress_OLD, $inshowemoticons_OLD, $inshowsignature_OLD, $currenttime_OLD, $inpost_OLD) = split (/\|/, $allmessages[$num]); chomp ($inpost_OLD); | заменить на: Код: $num = $totalthreadposts-1; ($inmembername_OLD, $topictitle_OLD, $postipaddress_OLD, $inshowemoticons_OLD, $inshowsignature_OLD, $currenttime_OLD, $inpost_OLD, $tempguest_OLD) = split (/\|/, $allmessages[$num]); chomp ($inpost_OLD); | Чуть ниже найти строки: Код: $inpost_OLD = $inpost_OLD . $addon . "$inpost\n"; | заменить на: Код: $inpost_OLD = $inpost_OLD . $addon . "$inpost|$tempguest_OLD\n"; | Найти: Код: foreach $messages (@allmessages) { chomp $messages; $processed_data .= "$messages\n"; } $processed_data .= "$inmembername|$topictitle|$postipaddress|$inshowemoticons|$inshowsignature|$currenttime|$inpost"; | заменить на: Код: foreach $messages (@allmessages) { chomp $messages; $processed_data .= "$messages\n"; } $processed_data .= "$inmembername|$topictitle|$postipaddress|$inshowemoticons|$inshowsignature|$currenttime|$inpost|$tempguest"; undef $tempguest; | В "sub threadreview" найти: Код: unless($reviewcount > 20) { ($membername, $topictitle, $postipaddress ,$showemoticons ,$showsignature ,$postdate ,$post) = split(/\|/, $threadline); | заменить на: Код: unless($reviewcount > 20) { ($membername, $topictitle, $postipaddress ,$showemoticons ,$showsignature ,$postdate ,$post , $tempguest) = split(/\|/, $threadline); | После Код: $post =~ s/\:\)/<img src=\"$imagesurl\/emoticons\/smile.gif\" border=\"0\">/g; $post =~ s/\;\)/<img src=\"$imagesurl\/emoticons\/wink.gif\" border=\"0\">/g; $post =~ s/\:\(/<img src=\"$imagesurl\/emoticons\/sad.gif\" border=\"0\">/g; $post =~ s/\:\o/<img src=\"$imagesurl\/emoticons\/shocked.gif\" border=\"0\">/g; | добавить: Код: $upmember = $membername; if ($membername eq $ibtxt{'0043'} && $tempguest ne "") {$upmember = $tempguest;} | Находим чуть ниже: Код: <td bgcolor="$miscbackone" rowspan=2 valign="top" width=20%><font face="$font" color=$fontcolormisc size=$dfontsize2> <b>$membername</b></font></td> | заменить на: Код: <td bgcolor="$miscbackone" rowspan=2 valign="top" width=20%><font face="$font" color=$fontcolormisc size=$dfontsize2> <b>$upmember</b></font></td> | В "sub addnewthread": После строк: Код: sub addnewthread { # start routine ### Lets sort out the flood control, incase they used the back button... &getmember("$inmembername"); | добавить: Код: if ($userregistered eq "no") {$tempguest=$inmembername; $inmembername="Guest"; $userregistered=""; &getmember("$inmembername");} | Найти: Код: # Create the new thread file $filetomake = "$ikondir" . "forum$inforum/$newthreadnumber.thd"; $filetomake = &stripMETA($filetomake); open(FILE, ">$filetomake"); #flock(FILE, 2); print FILE "$inmembername|$intopictitle|$postipaddress|$inshowemoticons|$inshowsignature|$currenttime|$inpost"; close(FILE); | заменить на: Код: # Create the new thread file $filetomake = "$ikondir" . "forum$inforum/$newthreadnumber.thd"; $filetomake = &stripMETA($filetomake); open(FILE, ">$filetomake"); #flock(FILE, 2); print FILE "$inmembername|$intopictitle|$postipaddress|$inshowemoticons|$inshowsignature|$currenttime|$inpost|$tempguest"; close(FILE); undef $tempguest; | Файл topic.cgi: -------------- Найти: Код: foreach (@threads[$startarray .. $endarray]) { ($membername, $topictitle, $postipaddress, $showemoticons, $showsignature, $postdate, $post) = split(/\|/,$_); | заменить на: Код: foreach (@threads[$startarray .. $endarray]) { ($membername, $topictitle, $postipaddress, $showemoticons, $showsignature, $postdate, $post, $tempguest) = split(/\|/,$_); if ($tempguest) {chomp($tempguest);} | После строк: Код: $postdate = $postdate + ($timedifferencevalue*3600) + ($timezone*3600); $postdate = &dateformat("$postdate"); &getmember("$membername"); $mname=$membername; | добавить: Код: if ($membername eq $ibtxt{'0043'} && $tempguest ne "") {$mname = $tempguest;} | Сразу после: Код: elsif ($membercode eq "banned") { $posterfontcolor = "$posternamecolor"; $membergraphic = ""; $membertitle = "$ibtxt{'3010'}"; } else { $posterfontcolor = "$posternamecolor"; } | добавить: Код: if ($membername eq $ibtxt{'0043'}) { $gueststyle="style=\"color: #8C8C8C\""; } else {undef $gueststyle;} | (здесь был назначен цвет ников всех незарегистрированных юзеров (color: #8C8C8C), меняйте на нужный) Найти: Код: $output .= qq~ <!--Begin Msg Number $postcountnumber--> <tr> <td bgcolor="$postbackcolor"> | выше этих строк добавить: Код: $upmember = $membername; if ($membername eq $ibtxt{'0043'} && $tempguest ne "") {$upmember = $tempguest;} | Найти: Код: <font face="$posternamefont" color="$posterfontcolor" size="$dfontsize2"> <a href="javascript:paste('$mname')"><b>$membername</b></a></font> <br>$useravatar | заменить на: Код: <font face="$posternamefont" color="$posterfontcolor" size="$dfontsize2"> <a $gueststyle href="javascript:paste('$mname')"><b>$upmember</b></a></font> <br>$useravatar | Файл postings.cgi: -------------- В "sub processedit": Найти: Код: @allthreads = <FILE>; close(FILE); ($postermembername, $topictitle, $postipaddress, $showemoticons, $showsignature ,$postdate, $post) = split(/\|/, @allthreads[$posttoget]); | Заменить на: Код: @allthreads = <FILE>; close(FILE); ($postermembername, $topictitle, $postipaddress, $showemoticons, $showsignature ,$postdate, $post, $tempguest) = split(/\|/, @allthreads[$posttoget]); chomp($tempguest); | Найти: Код: chomp $postline; if ($postcountcheck eq $posttoget) { $processed_data .= "$postermembername|$topictitle|$postipaddress|$inshowemoticons|$inshowsignature|$postdate|$inpost\n"; } | Заменить на: Код: chomp $postline; if ($postcountcheck eq $posttoget) { $processed_data .= "$postermembername|$topictitle|$postipaddress|$inshowemoticons|$inshowsignature|$postdate|$inpost|$tempguest\n"; } | ------------------------ P.S. Дабы ограничить количество вводимых символов ника (если у вас это ещё не сделано): в post.cgi: найти строки (всего 3 (!!!) вхождения, исправить, соответственно, 3 строки) Код: <input type=text size=20 name="membername" value="$inmembername"> | заменить на: Код: <input type=text size=20 maxlength=20 name="membername" value="$inmembername"> | то же в topic.cgi: найти строку (1 вхождение) Код: <input type=text size=20 name="membername" value="$inmembername"> | заменить на: Код: <input type=text size=20 maxlength=20 name="membername" value="$inmembername"> | (обратите внимание: maxlength=20 Решайте сами, увеличивать или нет максимальное кол-во символов в поле имени) P.P.S. Если вы хотите, чтобы в топике все ники гостей были сразу узнаваемы не только по цвету, но и по текстовой приставке (например не "Вася", а "Guest Вася") нужно исправить (ес-но, после всех вышеприведенных исправлений): Найти (в topic.cgi): Код: if ($membername eq $ibtxt{'0043'} && $tempguest ne "") {$upmember = $tempguest;} | заменить на: Код: if ($membername eq $ibtxt{'0043'} && $tempguest ne "") {$upmember = "Guest $tempguest";} | Найти: Код: if ($membername eq $ibtxt{'0043'} && $tempguest ne "") {$mname = $tempguest;} | заменить на Код: if ($membername eq $ibtxt{'0043'} && $tempguest ne "") {$mname = "Guest $tempguest";} | Найти (в post.cgi): Код: if ($membername eq $ibtxt{'0043'} && $tempguest ne "") {$upmember = $tempguest;} | заменить на: Код: if ($membername eq $ibtxt{'0043'} && $tempguest ne "") {$upmember = "Guest $tempguest";} | Бэкаптесь и тестируйте  |