HappyChamber - チュートリアル - ゲストブックを作る
[ 目次 ] | HappyChamber |
チュートリアル - ゲストブックを作る |
ここでは実際にオリジナル掲示板を1から作成する手順として、シンプルなゲストブックを作成してみます。
掲示板データベースの作成
最初に、掲示板のデータ構造を決めて、掲示板データベースを作成しなければなりません。掲示板データベースは、データ構造定義ファイルを作成し、create.plを使って作成します。まず、HappyChamberのインストールディレクトリに移動して、以下のファイルをgbook.structというファイル名で作成してください。ここでは、NAME項目30バイト、MAIL項目30バイト、BODY項目1,000バイトでデータベースを作成します。
NAME 30 MAIL 30 BODY 1000
次に、このデータ構造定義ファイルから、gbookという名前の掲示板データベースを作成します。以下のようにしてcreate.plを走らせます。Done.と表示されれば作成完了です。
./create.pl gbook gbook.struct
HCTファイルの作成
いよいよ掲示板のデザインやユーザーインタフェースを決める、HCTファイルを作成します。HCTファイルは、chamber.confで指定したパスか、あるいはエキストラパス指定やCGIリダイレクションを使うのなら、ドキュメントルート以下の適当な場所に作成します。
マニュアル通りの環境でインストールした方は、~/public_html/bbs/hct/に作成してください。ファイル名はgbook.hctです。
1: <HTML> 2: <HEAD><TITLE>ゲストブック</TITLE></HEAD> 3: <BODY> 4: <H3>ゲストブック</H3> 5: 6: <#IF $[SUBMIT]> 7: 記事を投稿しました (<&post(0, 20)>) 8: <#/IF> 9: 10: <#IF ! $[SUBMIT]> 11: 12: <FORM METHOD="POST"> 13: <INPUT TYPE="hidden" NAME="template" VALUE="$[template]"> 14: <INPUT TYPE="hidden" NAME="board" VALUE="$[board]"> 15: 名前:<INPUT TYPE="text" NAME="NAME"> 16: メール:<INPUT TYPE="text" NAME="MAIL"><BR> 17: メッセージ:<BR><TEXTAREA NAME="BODY" COLS="50" ROWS="7"></TEXTAREA> 18: <P><INPUT NAME="SUBMIT" TYPE="submit" VALUE="書き込む!"> 19: </FORM> 20: 21: <#ARTICLES ORDER="desc"> 22: <P><HR>No.#no at <? $Date = localtime($(#no)[date]) ?> $Date 23: from $(#no)[NAME] <A HREF="mailto:$(#no)[MAIL]">$(#no)[MAIL]</A> 24: <P><PRE>$(#no)[BODY]</PRE> 25: <#/ARTICLES> 26: 27: <#/IF> 28: 39: <P><HR> 30: <I><A HREF="about.cgi">Powered by HappyChamber</A></I> 31: 32: </BODY> 33: </HTML>
- 6〜8行目(投稿処理)
SUBMITボタンを押した後に処理されるブロックです。今回は、投稿処理ページと、記事表示ページを、ひとつのHCTファイルで行っています。ここで投稿処理と投稿した旨を示すメッセージを表示しています。<&〜>タグにより内部関数postを呼んでいます。サイクリック数は20、つまり記事数が20を越えると古い記事は自動的に削除されます。
- 10〜27行目(記事表示)
SUBMITでない場合に処理されるブロックです。投稿フォームと記事を表示します。
- 12行目(FORMタグ)
SUBMITボタンを押した後のアクションは、同一スクリプトなので、ACTION指定は省略しています。
- 13行目(template指定)
エキストラパス指定やCGIリダイレクションを使う場合は、不要です。
- 15〜17行目(入力フォーム)
データ構造定義で設定した項目名を使用することにより、post関数で投稿処理が行われます。
- 21〜25行目(記事表示)
降順に記事を表示します。<#ARTICLES> 〜 <#/ARTICLES>内では、#noは処理中の記事番号をあらわします。
- 22行目(記事番号と投稿日時表示)
Perl関数であるlocaltimeを使って、投稿日時データをローカル時間の文字列に変換しています。$(〜)[date]には記事の投稿日時がUNIX時間形式で格納されています。
- 23行目〜24行目(投稿者名、メールアドレス、本文表示)
例えばNAME項目に記録されたデータを表示するには、$(記事番号)[NAME]という変数を使用します。
起動
例えば、以下のようなURL指定で起動します。(環境によって違います)
http://www.pixy.ne.jp/~miyamae/bbs/chamber.cgi?template=gbook.hct&board=gbook
http://www.pixy.ne.jp/~miyamae/bbs/gbook.hct?board=gbook
[ 目次 ]