KAME-Board: Contents Management System: <skel >タグのしくみ

<skel >タグのしくみ

KAME-Board では、HTML中に、<skel >というタグ書いておくことによって、表示時に、そのタグを置換して表示します。

<skel var>

<skel var>タグは、変数 varの値に置換されます。変数への値のセットの方法は、2通りあります。

config/skel.db1 中にかいておく場合は、db1 形式を使います。コロンで項目名と 値が区切られた形式で、途中に空行やコメント、不要な空白を含めることはできま せん。空白を含めたばあい、その空白も文字(項目名や項目値)の一部として評価さ れます。

config/skel.db1 に bgcolor:#aaaaaaと書いておけば、HTMLファイル中の、 <skel bgcolor>という文字列は#aaaaaaに置換されます。

<skel >タグを置く位置はHTMLのタグの中でもかまいません。単純に置換さ れます。

db1 形式
項目名:項目値(改行)
項目名:項目値(改行)
項目名:項目値(改行)

<skel_var variable value>

SKEL 変数は、通常、プログラムや config/skel.db1 でセットされるが、skel ファイル中でも、<skel_var >構文を使ってセットできる。

variableは変数名で、空白や数字を含まない ASCII の識別子名、valueは値で、空白や日本語でもかまいません。

<skel_include filename>

<skel_include filename>タグは、タグの位置にファイルをインクルー ドします。<skel_include filename>の場合は、その HTML ファイル がおいてあるディレクトリか、それよりも上の階層の skel/ ディレクトリの filename.htm というファイルが読み込まれます。

この文書の場合、<skel_include sidebox_index>と書いておいて、 skel/sidebox.htm を読み込んでいます。

<skel_func function_name>

<skel_func function_name>タグは、タグを、プログラムの関数の実 行結果で置換します。実行される関数は、kameboard.cgi が読み込むライブラリ (lib/ ディレクトリに置いてある *.pl ファイルは自動的に読み込みます)の中か ら、グローバル変数 $SKEL_FUNC{function_name} に入っている関数リファレンス です。

代表的には、次のように記述します。

skel_func の定義例
# kame-dat/lib/skel_func_skeltest.pl
# <skel_func skeltest>
# $SKEL-> を全部表示する。

$SKEL_FUNC{'skeltest'} = \&skel_func_skeltest;

sub skel_func_skeltest{

  my $key;
  my $str;

  $str = <<"HTML";
<table border>
<tr><th colspan="2"><skel_func skeltest>
kame-dat/lib/skel_func_skeltest.pl:sub skel_func_skeltest</th></tr>
HTML

  foreach $key (keys %$SKEL){
    next if ($key =~ /photo/);
    $str .= "<tr><td>$key</td><td>$SKEL->{$key}</td></tr>\n";
  }

  $str .= "</table>\n";
  return $str;

}

1;  # *.pl ファイルの最後は TRUE を返す。

skel_func の実行例

評価順序

<skel >, <skel_var >, <skel_include >, <skel_func>の評価順序は次の通りです。

  1. <skel_vare >を全て処理する。
  2. <skel_include >を全て処理する。再帰的な<skel_include >を 含めて、HTML ファイル中に <skel_include >が無くなるまで処理を繰 り返す。読み込むべきファイルが見つからない <skel_include >は、 空に置換される。
  3. <skel_func >を全て処理する。再帰的な<skel_func >を、、 (以下同じ)
  4. <skel >を全て処理する。再帰的な<skel >を、、(以下同じ)
  5. <skel... で万一残ったタグは、全て消去されます。

<skel_var >→<skel_include >→<skel_func >→<skel >

つまり、<skel_func >の出力結果などには、<skel >を使えるという ことです。