Joyful Note という掲示板のスクリプトがあります。
Joyful Note : KENT-WEB CGI/Perl フリーソフト
デフォルトの設定では、スレッドに対してツリーを構成するための「[返信]」リンクが、親の書き込みにしかつきません。これを子の書き込みにもつけるためには、まず、以下の3点をjoyful.cgi(初期名称)に追記します。
1. sub bbs_list の変数の定義部分、コメントの「# 記事展開」の箇所に、リンク先指定用の変数(配列)を定義します。ここでは %reno を定義しました。
# 記事展開 my ($i,@log,%res,%nam,%sub,%dat,%com,%url,%col,%ext,%imw,%imh); my %reno; # 追記部分
2. 同じく sub bbs_list でのコメント「# ハッシュ化」の箇所に、先ほど定義した変数 %reno に対して値を代入します。
# ハッシュ化 $nam{$no} = $name; $sub{$no} = $sub; $dat{$no} = $date; $com{$no} = $com; $col{$no} = $col; $url{$no} = $url; $reno{$no} = $reno; # 追記部分
3. 同じく sub bbs_list での「# 記事表示」部分内、「my $tmp = $resloop;」からの置換の羅列のところに、$renoの置換を付け加えます。
my $tmp = $resloop; $tmp =~ s/!sub!/$sub{$r}/g; $tmp =~ s/!name!/$nam{$r}/g; $tmp =~ s/!url!/$url{$r}/g; $tmp =~ s/!date!/$dat{$r}/g; $tmp =~ s/!num!/$r/g; $tmp =~ s/!comment!/$com{$r}/g; $tmp =~ s/!reno!/$reno{$r}/g; # 追記部分 $res .= $tmp;
以上で joyful.cgi への追記は終わりです。続いてテンプレートの res.html に追記をします。テンプレートである bbs.html を全く同じように真似して、「返信」を含む行を追加しただけです。
<div class="reslog"> <strong>!sub!</strong> <div class="rescom">!comment!</div> <div class="art-info"> !icon:user_com.png! <b>!name!</b> !icon:time.png! !date! !url! <span class="num">No.!num!</span> [<a href="#" onclick="window.open('index.cgi?res=!reno!','_self')">返信</a>] </div> </div>
これで全ての追加は完了です。掲示板をリロードすると、全ての書き込みに対して「[返信]」のリンクがついているはずです。レスが多くついたスレッドに対してレスをする際に、わざわざ親の書き込みまで戻らなくてよくて便利になりました。