- ベストアンサー
スキン式掲示板の仕組み
- スキン式掲示板は、HTMLファイルとして作られたスキンを読み込んで表示する仕組みです。
- 掲示板内の特定の箇所をブロックわけし、各ブロックに記事ごとのデータを渡すことで、記事の表示を制御しています。
- さらに、入れ子構造をもつレス記事を扱いたい場合にも、適切な仕組みを利用することで実現することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
続いて、レス式の場合ですが、 スキンファイルは、 # 固定部分 <!--thread--> # 親記事 [$thread] スレッド名: $title [$id] $name さん メッセージ: $message <!--res--> # 子記事 [$id] $name さん メッセージ: $message <!--res--> ... <!--thread--> # 固定部分 な感じで、保存データ形式が、 スレッド番号,スレッドタイトル,記事番号,名前,メッセージ<>記事番号,名前,メッセージ<>記事番号,名前,メッセージ ... スレッド番号,スレッドタイトル,記事番号,名前,メッセージ<>記事番号,名前,メッセージ<>記事番号,名前,メッセージ ... スレッド番号,スレッドタイトル,記事番号,名前,メッセージ<>記事番号,名前,メッセージ<>記事番号,名前,メッセージ ... ... な感じだとすると、 # ログファイル読み込み (省略) ... my ($head, $body, $foot) = split (/<!--thread-->/, $skin_file); my ($bodies) = ''; foreach (@log) { # 親記事と子記事に分離 my ($parent, @children) = split (/<>/, $_); my ($res_head, $res_body, $res_foot) = split (/<!--res-->/, $body); # 親記事データ分離 my ($thread, $title, $id, $name, $title, $message) = split (/,/, $parent); # 親記事データ置換 $res_head =~ s/\$thread/$thread/gi; $res_head =~ s/\$title/$title/gi; ... my ($res_bodies) = ''; foreach (@children) { # 子記事データ分離 my ($id, $name, $title, $message) = split (/,/, $_); my ($res) = $res_body; # スキンコピー # 子記事データ置換 $res =~ s/\$id/$id/gi; $res =~ s/\$name/$name/gi; ... $res_bodies .= $res; # 記事データ連結 } $bodies .= "$res_head$res_bodies$res_foot"; # 記事データ連結 } で、最後に、"$head$bodies$foot"を出力する。 という感じになります。
その他の回答 (1)
私が解読を試みた事があるのは、「apeboard」なのでKENT WEBのとはちょっと違うと思いますが、回答させていただきます。 記事ごとにデータを渡す仕組みですが、大まかに言うと、 # 固定部分 ... <!--article--> # 繰り返し部分 [$id] $name さん タイトル: $title メッセージ: $message <!--article--> # 固定部分 ... というスキンがあるとすると、 my ($head, $body, $foot) = split (/<!--article-->/, $skin_file); で、まずはスキンを分離しておきます。 記事データが、 記事番号,名前,タイトル,メッセージ 記事番号,名前,タイトル,メッセージ 記事番号,名前,タイトル,メッセージ ... な感じの、保存形式だとすると open (LOG, $log_file); @log = <LOG>; close (LOG); chomp @log; # 改行文字切り落とし で、ファイルから読み込み、記事ごとに配列に格納しておいて、 my ($bodies) = ''; foreach (@log) { # データ分離 my ($id, $name, $title, $message) = split (/,/, $_); my ($article) = $body; # スキンコピー # データ置換 $article =~ s/\$id/$id/gi; $article =~ s/\$name/$name/gi; $article =~ s/\$title/$title/gi; $article =~ s/\$message/$message/gi; $bodies .= $article; # 記事データ連結 } で、最後に、"$head$bodies$foot"を出力する。 という感じの仕組みになります。
- 参考URL:
- http://www.2apes.com/