KENT-WEB サポートコーナー 過去ログ [ 0119 ]


記事No: 5012
投稿日: 2008/12/03(Wed) 04:13:49
タイトルsun boardの過去ログについて
ID情報: joaquin9
投稿者: hide
URLhttp://homepage2.nifty.com/gentian/ss/

こんにちは。SUN BOARDを愛用させて頂いてます。
今回、過去ログの生成について一つ疑問点がありましたので質問に参りました。

regist.cgiにて「表示ファイル第1ページの記事数」を5に設定しているのですが、記事総数が25だった場合、第2ページに20個の記事が並んでしまいます。
これを第2ページ、第3ページと記事数5のままで自動生成することってできるんでしょうか?

使ってるうちに2ページ目がやたら長くなってしまって不便なのでどうにかしたいと思いまして。
どうぞよろしくお願いします。


記事No: 5013
投稿日: 2008/12/03(Wed) 21:29:41
タイトルRe: sun boardの過去ログについて
ID情報: Fuyuki
投稿者: BAL
URLhttp://f43.aaa.livedoor.jp/~sumure/

> こんにちは。SUN BOARDを愛用させて頂いてます。
> 今回、過去ログの生成について一つ疑問点がありましたので質問に参りました。
>
> regist.cgiにて「表示ファイル第1ページの記事数」を5に設定しているのですが、記事総数が25だった場合、第2ページに20個の記事が並んでしまいます。
> これを第2ページ、第3ページと記事数5のままで自動生成することってできるんでしょうか?
>
> 使ってるうちに2ページ目がやたら長くなってしまって不便なのでどうにかしたいと思いまして。
> どうぞよろしくお願いします。


HTMLで次のページを生成させるのは面倒ですので、ASKA BBSの様にCGIで表示させてはいかがでしょうか。
sunbbs.cgiにアクセスすれば記事が表示されます。

●sunbbs.cgi

# 外部ファイル
require './init.cgi';
require $jcode;

&decode;
if ($mode eq 'form') { &form; }
elsif ($mode eq 'find') { &find; }
elsif ($mode eq "past" && $pastkey) { &past; }
elsif ($mode eq "check") { ✓ }
&location; ## ★これを利用する


以下のサブルーチンを追加

#-------------------------------------------------
# 記事表示
#-------------------------------------------------
sub location {
my $page = 0;
foreach ( keys(%in) ) {
if (/^page:(\d+)$/) {
$page = $1;
last;
}
}
print &header;
print qq|[<a href="$htm_url$htmfile">戻る</a>]\n|;
# ログを開く
my $i = 0;
open(IN,"$logfile") || &error("Can't open $logfile");
while (<IN>) {
$i++;
next if ($i < $page + 1);
next if ($i > $page + $pagelog);
($num,$date,$name,$email,$sub,$com,$url) = split(/<>/);
print &log_view($_);
}
close(IN);

# ページ繰り越し
my $next = $page + $pagelog;
my $back = $page - $pagelog;

print qq|<form action="$script" method="post">|;

if ($back >= 0) {
print "<input type=\"submit\" name=\"page:$back\" value=\"前の$pagelog件\">\n";
}
if ($next < $i) {
print "<input type=\"submit\" name=\"page:$next\" value=\"次の$pagelog件\">\n";
}

print "</form></body>\n</html>\n";
exit;
}


●init.cgi

#-------------------------------------------------
# フォームデコード
#-------------------------------------------------
sub decode {
my $buf;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
if ($ENV{'CONTENT_LENGTH'} > $maxData) {
&error("投稿量が大きすぎます");
}
read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
} else {
$buf = $ENV{'QUERY_STRING'};
}

undef(%in);
foreach ( split(/&/, $buf) ) {
my ($key,$val) = split(/=/);
$key =~ tr/+/ /; ## ★追加
$key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; ## ★追加
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;


[検索ページ]