1時間で作成したシンプルな掲示板です。作成過程を説明します。完成したものは、こちらです。
一番最初に、サンプルページを作ります。今回作成したものは、これ。
サンプルページを元に、テンプレートファイルを作成します。
コンポーネントを保存するMainPageディレクトリを作成し、MainPage.htmlとMainPage.ckdを作成します。
samplebbs/
└MainPage/
MainPage.html
MainPage.ckd
サンプルページのHTMLをMainPage.htmlにコピーした後、MainPage.htmlを編集します。
最初にフォーム関連のタグをCGIKitのタグに置き換えます。
変更前 <form name="Form" id="Form" method="post" action="">
変更後 <cgikit name="Form">
変更前 <input name="Name" type="text" id="Name" />
変更後 <cgikit name="Name" />
変更前 <input name="Subject" type="text" id="Subject" />
変更後 <cgikit name="Subject" />
変更前 <textarea name="Body" id="Body"></textarea>
変更後 <cgikit name="Body" />
変更前 <input type="submit" name="Submit" value="送信" />
変更後 <cgikit name="Submit" />
メッセージの表示部分をCGIKitのタグに置き換えます。
変更前 題名
変更後 <cgikit name="MesSubject" />
変更前 名前
変更後 <cgikit name="MesName" />
変更前 日時
変更後 <cgikit name="MesDate" />
変更前 本文
変更後 <cgikit name="MesBody" />
メッセージの繰り返しになる部分をCGIKitのタグで指定します。
<cgikit name="Messages">〜</cgikit>
ついでに、エラーメッセージを表示するためのタグを作成します。
<cgikit name="Error" />
以上で、テンプレートファイルが完成しました。完成したテンプレートファイルはこれ。
サンプルページとテンプレートファイルを元にバインディングを作成します。
メッセージの本文の表示は複数行の文字を表示するので、標準のエレメントではなく拙作のCKGParagraphを使用します。
完成したバインディングはこれ。
ようやくRubyで実装します。
最初にメッセージの保存と読み込みの機能を作成します。これらの機能はMessageクラス(message.rb)に任せます。
メッセージは、PStoreを使用して、配列で保存することにします。
メッセージを表示するときに、新しいものから順番に表示したいので、新しいメッセージは配列の先頭に保存するようにしました。
保存件数は、最大10件とし、10件を超えたときは古いものから削除します。最大保存件数は、定数MAX_COUNTで指定することにしました。
完成したMessageクラスはこれです。もちろん、テストも行います。
samplebbs/
│cgikit_ext.rb
│message.rb (Messageクラス)
├MainPage/
│ MainPage.html
│ MainPage.ckd
└db/ (メッセージを保存するディレクトリ)
MainPage.rbを作成し、実装します。
表示するメッセージの一覧を取得(listメソッド)で は、Message.load の返値を返します。
メッセージの書き込み(submitメソッド)は、入力内容をチェックしてから、登録します。
例外が発生したときは、@errorに例外の内容を代入し、画面上にエラーメッセージを表示するようにしました。
完成したMainPage.rbはこれです。
samplebbs/
│cgikit_ext.rb
│message.rb (Messageクラス)
├MainPage/
│ MainPage.html
│ MainPage.ckd
│ MainPage.rb]
└db/ (メッセージを保存するディレクトリ)
最後にbbs.cgiを実装します。次のようになります。
#!/usr/bin/ruby -Ke
require 'cgikit'
require 'cgikit_ext'
require 'message'
app = CKApplication.new
app.run
ファイル構成
samplebbs/
│bbs.cgi
│cgikit_ext.rb
│message.rb (Messageクラス)
├MainPage/
│ MainPage.html
│ MainPage.ckd
│ MainPage.rb
└db/ (メッセージを保存するディレクトリ)
アクセス権を設定します。
以上で完成しました。実際に動いている様子はこちらでご覧になれます。