HappyChamber - HCTエクステンションリファレンス
[ 目次 ] | HappyChamber |
HCTエクステンションリファレンス |
以下は、HCTファイルで使用できる、拡張タグと変数と関数のリファレンスです。
HappyChamberでは、非常に高度なカスタマイズが可能ですが、厳密な文法チェックは行っていません。またエラーの際に表示されるエラーメッセージはあまり親切ではないものもあります。したがって、エラーチェックに頼らず、サンプルを元に、少しずつカスタマイズしてみてください。
また、ユーザー定義の変数、関数、フィールド名、クッキー名、クエリーデータ名には、必ず大文字を加えてください。例えばnameではなく、NameやNAMEを使用してください。小文字だけの名前を使用すると、HappyChamber内部で使用されている名前と衝突して、思わぬ動作をする可能性があります。
拡張タグ
<#ARTICLES オプション> 〜 <#/ARTICLES>
特定の条件にマッチした複数の記事データを連続して処理させる場合に使用します。例えば、記事の一覧表示などが相当します。
ディレクティブ内では特殊変数#NOが使用できます。これは現在処理されている記事番号を表わします。例えば以下の例では、全ての記事のSUBJECTを表示します。
<#ARTICLES>
$(#NO)[SUBJECT]<BR>
<#/ARTICLES><#ARTICLES>には、以下のオプションがあります。
対象記事の指定
以下の2つのオプションは排他指定です。どれか1つの指定方法だけを選んで使用します。特に指定しなければ、ROOT="0"が指定されたのと同等で、全ての記事が対象となります。
NO
記事番号をカンマ区切りで指定します。指定された記事が対象となります。ROOT
記事番号を1つだけ指定します。指定された記事番号に対する、コメント記事以下のスレッドが対象となります。0を指定すると、掲示板の全ての記事が対象となります。DATEAFTER
UNIX時間形式(9桁の数値)で指定します。指定された日時以降に投稿された記事が対象となります。NO、ROOT、UNREAD、SEARCHオプションと複合指定可能です。UNREAD
"yes"または"no"を指定します。未読記事が対象となります。NO、ROOT、DATEAFTER、SEARCHオプションと複合指定可能です。未読記事についてはberead()関数を参照してください。SEARCH
"yes"または"no"を指定します。フォームで入力された検索条件にマッチした記事が対象となります。検索はAND、部分一致により行われます。NO、ROOT、DATEAFTER、UNREADオプションと複合指定可能です。TREE
"yes"または"no"を指定します。記事番号順で処理するか、コメントツリーの順序で処理するかを指定します。"yes"指定の場合、ディレクティブ内で$depth{}変数(記事のスレッドの深さ)、$node{}(コメント記事リスト)変数が使用できます。ORDER
処理される記事の並び順です。"desc"(降順)または"asc"(昇順)を指定します。コメントツリーモードでは、最上位階層だけが、この指定の影響を受けます。デフォルトは"asc"です。PAGE
ページ番号と1ページの記事数をカンマ区切りで指定します(例:PAGE="1,50")。あまりに多数の記事が対象となってしまう可能性がある場合は、このオプションを使用して表示数を制限するのが望ましいです。制限 1) <#ARTICLES>タグ内で、組み込み変数を使う事は可能ですが、ユーザー変数を使用する事はできません。
制限 2) open_board関数でオープンした掲示板に対して処理を行う事はできません。
<#IF 条件> 〜 </#IF>
条件にマッチした場合のみ、ディレクティブ内を出力します。条件には、Perlの比較演算が使用できますが、>(より大きい)、>=(以上)、<=>(不一致)は使用できません。これは、>文字がタグの文字と混同してしまうためです。これらは、右辺と左辺を入れ替えたり、!(否定演算子)を使用することで、同等の条件を指定することができます。
<#IF ! $[NAME]>
名前が指定されていません
<#/IF>このディレクティブは入れ子にすることができません。より複雑なことを行うには、<? 〜 ?>タグを使用する必要があります。
<? 〜 ?>
Perlスクリプトを記述します。returnで指定された値を埋め込みます。以下の例は<#IF>ディレクティブでの例と同等の処理です。
<?
unless ($[NAME]) {
return '名前が入力されていません';
}
?>
注意 1) このタグでは、自由に、変数や関数を作ることができますが、内部で使用されている名前との衝突を避けるために、関数名や変数名には、必ず英大文字を含めてください。
注意 2) mod_perlを使用する場合は、変数が自動的に初期化されません。その場合は明示的に変数を初期化するようにしてください。
<& 〜 >
関数を呼び、結果を埋め込みます。関数はPerlの標準関数と、HappyChamber拡張関数、ユーザー定義関数が使用できます。
<&html_encode($($[NO])[NAME])>
結果の埋め込みを行いたくない場合は、<? 〜 ?>タグを使用してください。
<#HEADER 〜>
HTTPヘッダを追加します。例えば、指定ページへリダイレクトさせるには、以下のようにします。
<#HEADER "Location: http://www.pixy.ne.jp/chamber/">
組み込み変数
変数は、HCTファイルの任意の場所に張り込むことができます。
$[〜]
URLやフォームで与えられたクエリーデータの値を埋め込みます。例えば、foo.hct?NO=3で与えられた場合、$[NO]は3になります。
ユーザー指定のクエリーデータの名称には、内部で使用されている名称との衝突を避けるために、英大文字を含めてください。
この変数は読み込み専用です。
$(記事番号)[フィールド名]
指定した記事番号、フィールドのデータを埋め込みます。以下の例ではクエリーデータNOを記事番号とした、NAMEフィールドの値を返します。
$($[NO])[NAME]
データ構造定義で設定したユーザー定義フィールドの他、以下の既定フィールドが使用できます。
no 記事番号 reply 返信元記事番号 date 投稿日時(UNIX時間形式) count 参照数(inc_read_count関数で設定) remote_host 投稿者のリモートホスト名 http_user_agent 投稿者のブラウザ情報 read 既読記事の場合設定されます readフィールドは特殊で、これだけは掲示板データベースではなく、クライアント(ブラウザ)側にクッキーデータとして保存されています。beread()関数で既読化した記事に対して、1が設定されます。このフィールドを見ることにより、対象記事が未読記事であるかどうかを判別することができます。
この変数は読み込み専用です。
$cookies{'〜'}
この変数に代入した値は、ブラウザにクッキーとして保存され、次回参照することができます。例えば、以下のコードは、ユーザーごとの訪問数を表示します。
あなたは、<% return ++$cookies{'AccessCount'} %> 回、ここに来ましたね。
$cookiesによる、クッキーは掲示板データベース毎に保存されます。クッキーには1ドメインあたり20個までという制約があります。従ってク$cookiesや未読管理を使用する場合、1ドメインで(ブラウザ側で)管理できる掲示板は最大20までとなります。
全ての掲示板で共通にデータを保持したい場合は、$global_cookiesを使用します。
ユーザー指定のクッキーの名称には、内部で使用されている名称との衝突を避けるために、英大文字を含めてください。
$global_cookies{'〜'}
$cookiesと同様ですが、全ての掲示板データベースで共通に扱われます。
$num_articles
現在データベースに保存されている記事の数です。例えば投稿時に100でサイクリックさせているのなら、この値は100より大きくはなりません。
この変数は読み込み専用です。
$recent_no
最も最近投稿された記事の記事番号です。$num_articlesとは意味が異なります。
この変数は読み込み専用です。
内部関数
以下はHappyChamber拡張関数です。他にPerlの標準関数やユーザー定義関数を使用することができます。関数は、<! 〜 >タグか、<? 〜 ?>タグで使用します。
post(コメント元記事番号, サイクリック数)
記事を投稿します。クエリーデータから、構造定義で定義されたフィールドのデータを、データベースに書き込みます。
引数には、コメント元の記事番号と、サイクリック数を指定できます。コメント元記事番号は、投稿する記事がコメント記事である場合に指定します。そうでない場合は、未指定、あるいは0を指定します。サイクリック数を指定した場合、この数を越えると、自動的にremove関数が呼び出され、最も古い記事が1つだけ削除されます。
正常に投稿を完了すると、投稿した記事番号を返します。
remove(記事番号)
記事を削除します。削除した記事に対してのコメント記事は、上位の記事にリンクが張り直されます。
inc_read_count(記事番号)
記事のcountフィールドをインクリメントします。記事の参照数を表示させたい場合に、記事を参照したタイミングでこの関数を明示的に呼んでください。
get_localtime(UNIX時間)
UNIX時間形式の数値を与えると、2桁の日時情報に分解して返します。例えば、ある記事の投稿日時を調べるには、以下のようにします。
($Sec, $Min, $Hour, $Day, $Mon, $Year) = &get_localtime($($[NO])[date]);
html_encode(文字列)
与えられた文字列のHTML特殊文字を、HTMLの形式に変換して返します、具体的には以下の変換が行われます。
& → &
< → <
> → >
" → "
url_encode(文字列)
与えられた文字列を、 クエリー文字列として使えるように変換して返します。
open_board(掲示板データベース名)
指定された掲示板をオープンします。これまでオープンされていた掲示板はクローズされます。以降の組み込み変数は新しくオープンされた掲示板を対象にした値になります。ただし、<#ARTICLES>は、open_board関数の影響を受けず、board指定だけが有効となります。
be_read(記事番号)
指定記事を読んだ(既読)ことにして、その情報をクッキーとしてブラウザに記録します。記事番号を省略すると、全ての記事を読んだことにします。
未読情報は、$(記事番号)[read]変数で参照したり、<#ARTICLES>のUNREADオプション指定で使用することができます。
be_unread(記事番号)
指定記事を読んでいない(未読)ことにして、その情報をクッキーとしてブラウザに記録します。記事番号を省略すると、全ての記事を読んでいないことにします。
未読情報は、$(記事番号)[read]変数で参照したり、<#ARTICLES>のUNREADオプション指定で使用することができます。
get_num_unread()
現在オープンしている掲示板の未読記事の数を返します。
[ 目次 ]