■ CGI初歩の初歩
|
■ 掲示板を作成する3 スクリプト 実行今回は2つのことをしました。最初の改良は1つのページに全ログを表示していたのを改め、指定された数だけ表示するようにしたことです。 DispLogルーチンを改造しました。ログを表示するときに$topより前のログだったら、読み飛ばすようにしています。その後、$nextまでを表示しています。さらにログを表示し終わった後、prev nextを必要に応じて付加しています。 sub DispLog {
my $next = $top + $numPerPage;
my $prev = $top - $numPerPage;
my $i;
if( !open(IN, $log_file) ) {
# print "ファイルがオープンできません<BR>\n";
}
else {
$i = 0;
while ($line = <IN>) {
if( $i < $top ) {
++$i;
}
elsif( $i < $next ) {
++$i;
my ($no, $date, $name, $title, $mail, $comment, $home) = split(/<>/,$line);
print <<"EOM";
<table align="center" width="90%" cellpadding=1 cellspacing=1 class=C1>
<tr>
<td>$no <font color="blue"><b>$name</b></font> $date $title <a href="mailto:$mail">mail</a>
<a href="http://$home">home</a></td>
</tr>
<tr>
<td><hr>$comment</td>
</tr>
</table>
<br>
EOM
}
else {
break;
}
}
close(IN);
my $flag = 0;
if( $top != 0 ) {
print "<div align=\"center\"><span class=C2><a href=\"$script?no=$prev\">Prev</a>";
$flag = 1;
}
if( $flag == 1 ) {
print " ";
}
if( $i == $next ) {
if( $flag != 1 ) {
print "<div align=\"center\"><span class=C2>";
}
print "<a href=\"$script?no=$next\">Next</a>";
$flag = 1;
}
if( $flag == 1 ) {
print "</span></div><br>\n";
}
}
}
もう一つの改良は、今まで何処までもログを保存しようとしていたのですが、これを改め指定のメッセージ数までで制限するようにしたことです。 WriteMessageルーチンの中のログを書き出しているところで、蓄積されているログのメッセージ数を求めて、マックスに達していたら一番古いメッセージを捨てるようにしました。 $length = @bufで配列の要素数を得られるのですね。最初、これが分からずインターネットを色々見てやっと発見しました。 my $length = @buf;
if( $length == $numMaxMsg ) {
print OUT @buf[0..$length-2];
}
else {
print OUT @buf;
}
|