shishkov
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору 1. Поскльку ссылка с сайта идет на топик, а не на конкретный пост то была идея сделать, чтобы новое сообщение которое добавляется в тему добавлялось бы на место старого из этой темы. (если этого не сделать - форум "треп" часто забивает все остальное) 2. Избавиться от запуска перла при загрузке главной страницы, использовать только SSI. 3. Для того, чтобы было нельзя изуродовать дизайн сайта написав_длинное_слово - сделать, чтобы слово больше определенной длины разрезалось на несколько слов. 4. Выводить на гл. стр последнее сообщение по новой теме - сверху. в порядке изучения перла сделал следующее: в post.cgi найти sub addnewthread { # start routine вместо Код: ### RECENT POST HACK BEGIN if ($privateforum ne "yes"){ if("$ikondir" . "data/allforums.cgi"){ open(FILE, "$ikondir" . "data/recentpost.dat"); @recentposts=<FILE>; close(FILE); chmod(0666,"$ikondir" . "data/recentpost.dat"); if (@recentposts > 4){ # число топиков на гл. страницу минус один # Remove First Item $temp = shift(@recentposts); } open (FILE, ">$ikondir" . "data/recentpost.dat") || die("Can't open recentpost.dat"); foreach $current (@recentposts){ print FILE "$current"; } print FILE "$inforum|$newthreadnumber|$intopictitle|$inpost|$inpostno\n"; close(FILE); chmod(0666,"$ikondir" . "data/recentpost.dat"); } else { open (FILE, ">$ikondir" . "data/recentpost.dat") || die("Can't open recentpost.dat"); print FILE "$inforum|$newthreadnumber|$intopictitle|$inpost|$inpostno\n"; close(FILE); chmod(0666,"$ikondir" . "data/recentpost.dat"); } } #end if ($privateforum ne "yes"){ ### END HACK | сделал Код: ### RECENT POST HACK BEGIN if ($privateforum ne "yes"){ if("$ikondir" . "data/recentpost.dat"){ open(FILE, "$ikondir" . "data/recentpost.dat"); flock (FILE, 2); @recentposts=<FILE>; close(FILE); chmod(0666,"$ikondir" . "data/recentpost.dat"); $added=0; foreach $post_f(@recentposts){ ($inforum_f,$newthreadnumber_f,$intopictitle_f,$inpost_f,$inpostno_f)=split(/\|/,$post_f); if($inforum_f eq $inforum and $newthreadnumber eq $newthreadnumber_f){ $post_f="$inforum|$newthreadnumber|$intopictitle|$inpost|$inpostno\n"; $added=1; last; }; }; open (FILE, ">$ikondir" . "data/recentpost.dat") || die("Can't open recentpost.dat"); flock (FILE, 2); if (@recentposts > 4 and not $added){ # число топиков на гл. страницу минус один # Remove First Item $temp = shift(@recentposts); push @recentposts,"$inforum|$newthreadnumber|$intopictitle|$inpost|$inpostno\n"; }elsif(@recentposts > 4 and $added){ # число топиков на гл. страницу минус один $tmp_po=''; }else{ push @recentposts,"$inforum|$newthreadnumber|$intopictitle|$inpost|$inpostno\n"; }; print FILE @recentposts; close(FILE); chmod(0666,"$ikondir" . "data/recentpost.dat"); } else { open (FILE, ">$ikondir" . "data/recentpost.dat") || die("Can't open recentpost.dat"); flock (FILE, 2); push @recentposts,"$inforum|$newthreadnumber|$intopictitle|$inpost|$inpostno"; print FILE @recentposts; close(FILE); chmod(0666,"$ikondir" . "data/recentpost.dat"); } &atop5(@recentposts); } #end$privateforumneyes ### END HACK | в sub addreply { # start routine вместо Код: ### RECENT POST HACK BEGIN if ($privateforum ne "yes"){ if("$ikondir" . "data/allforums.cgi"){ open(FILE, "$ikondir" . "data/recentpost.dat"); @recentposts=<FILE>; close(FILE); chmod(0666,"$ikondir" . "data/recentpost.dat"); if (@recentposts > 4){ # Remove First Item $temp = shift(@recentposts); } open (FILE, ">$ikondir" . "data/recentpost.dat") || die("Can't open recentpost.dat"); foreach $current (@recentposts){ print FILE "$current"; } print FILE "$inforum|$intopic|$topictitle|$inpost|$inpostno\n"; close(FILE); chmod(0666,"$ikondir" . "data/recentpost.dat"); } else { open (FILE, ">$ikondir" . "data/recentpost.dat") || die("Can't open recentpost.dat"); print FILE "$inforum|$intopic|$topictitle|$inpost|$inpostno\n"; close(FILE); chmod(0666,"$ikondir" . "data/recentpost.dat"); } }##end if ($privateforum ne "yes"){ ### END HACK | сделал Код: ### RECENT POST HACK BEGIN # Форум "тусовка" - не писать. if ($privateforum ne "yes"){ if("$ikondir" . "data/recentpost.dat"){ open(FILE, "$ikondir" . "data/recentpost.dat"); flock (FILE, 2); @recentposts=<FILE>; close(FILE); chmod(0666,"$ikondir" . "data/recentpost.dat"); $added=0; foreach $post_f(@recentposts){ ($inforum_f,$intopic_f,$topictitle_f,$inpost_f,$inpostno_f)=split(/\|/,$post_f); if($inforum_f eq $inforum and $intopic eq $intopic_f){ $post_f="$inforum|$intopic|$topictitle|$inpost|$inpostno\n"; $added=1; last; }; }; open (FILE, ">$ikondir" . "data/recentpost.dat") || die("Can't open recentpost.dat"); flock (FILE, 2); if (@recentposts > 4 and not $added){ # Remove First Item $temp = shift(@recentposts); push @recentposts,"$inforum|$intopic|$topictitle|$inpost|$inpostno\n"; }elsif(@recentposts > 4 and $added){ $tmp_po=''; }else{ push @recentposts,"$inforum|$intopic|$topictitle|$inpost|$inpostno\n"; }; print FILE @recentposts; close(FILE); chmod(0666,"$ikondir" . "data/recentpost.dat"); } else { open (FILE, ">$ikondir" . "data/recentpost.dat") || die("Can't open recentpost.dat"); flock (FILE, 2); push @recentposts,"$inforum|$intopic|$topictitle|$inpost|$inpostno"; print FILE @recentposts; close(FILE); chmod(0666,"$ikondir" . "data/recentpost.dat"); } &atop5(@recentposts); } #end$privateforumneyes ### END HACK | В конец post.cgi добавить: Код: sub atop5{ my (@datas,$string,@top5,$html); @datas=@_; @datas=reverse @datas; foreach $string(@datas) { @top5 = split(/\|/,$string); $top5[3] = join(' ',split(/<br>/,$top5[3])); $top5[3] = join(' ',split(/<p>/,$top5[3])); $top5[3] = join(' ',split(/>/,$top5[3])); $top5[3] = join(' ',split(/"e;/,$top5[3])); $top5[3] = join(' ',split(/ /,$top5[3])); $top5[3] = join(' ',split(/</,$top5[3])); $top5[3] = join('',split(/\[b\]/,$top5[3])); $top5[3] = join('',split(/\[\/b\]/,$top5[3])); $top5[3] = join('',split(/\[i\]/,$top5[3])); $top5[3] = join('',split(/\[\/i\]/,$top5[3])); $top5[2]=devides("$top5[2]"); $top5[3]=devides("$top5[3]"); $top5[3] = substr($top5[3],0,30) . "..." if (length($top5[3]) > 30); $top5[2] = substr($top5[2],0,20) . "..." if (length($top5[2]) > 20); if ($top5[0]) { # здесь можно отформатировать сообщение записав $html .="<b>" итп $html.="<li><a href=\"$boardurl"."/$threadprog?forum=$top5[0]&topic=$top5[1]\">$top5[2]: $top5[3]</a><br>\n"; } } open(TOP5,">$imagesdir"."top5.html") || die "Ошибка при открытии файла"."$imagesdir".'top5.html:'."$!"; # $imagesdir это путь на сервере! flock (TOP5, 2); print TOP5 "$html"; close TOP5; #exit; } #sub atop5 | и Код: sub devides{ # режет длинное непрерывное слово my($string) = @_; my(@tmp5,$stmp5,$lng,$ng,$i,$stmp52, $wordl); $wordl=14; # максимальная длина слова @tmp5 = split(/ /,$string); foreach $stmp5(@tmp5){ $lng=length($stmp5); if ($lng > $wordl) { $ng=$lng/$wordl; $stmp52=substr($stmp5,0,$wordl)." "; for ($i=1 ; $i<=$ng ; $i++){ $stmp52 .= substr($stmp5,$i*$wordl,$wordl)." " }; $stmp5=$stmp52; }; }; $string=join(" ",@tmp5); return $string; }#### sub devides | теперь вместо вставки на главную страницу <!--#include virtual="[ваш_путь к top5.cgi]/top5.cgi" --> поставить например. <!--#include virtual="[то что стоит в boardinfo.cgi в $imagesurl URL на тоже место что и $imagesdir ]/top5.html" --> | Всего записей: 44 | Зарегистр. 15-06-2002 | Отправлено: 19:29 12-07-2004 | Исправлено: shishkov, 19:42 30-07-2004 |
|