[ 目次 ] 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の形式に変換して返します、具体的には以下の変換が行われます。

& → &amp;
< → &lt;
> → &gt;
" → &quot;

url_encode(文字列)

 与えられた文字列を、 クエリー文字列として使えるように変換して返します。

open_board(掲示板データベース名)

 指定された掲示板をオープンします。これまでオープンされていた掲示板はクローズされます。以降の組み込み変数は新しくオープンされた掲示板を対象にした値になります。ただし、<#ARTICLES>は、open_board関数の影響を受けず、board指定だけが有効となります。

be_read(記事番号)

 指定記事を読んだ(既読)ことにして、その情報をクッキーとしてブラウザに記録します。記事番号を省略すると、全ての記事を読んだことにします

 未読情報は、$(記事番号)[read]変数で参照したり、<#ARTICLES>のUNREADオプション指定で使用することができます。

be_unread(記事番号)

 指定記事を読んでいない(未読)ことにして、その情報をクッキーとしてブラウザに記録します。記事番号を省略すると、全ての記事を読んでいないことにします

 未読情報は、$(記事番号)[read]変数で参照したり、<#ARTICLES>のUNREADオプション指定で使用することができます。

get_num_unread()

 現在オープンしている掲示板の未読記事の数を返します。


[ 目次 ]