CGI プロセスの内部構造 メソッド FML::CGI のクラスは以下のメソッド群を実装して下さい。 html_start() run_cgi_main() run_cgi_title() run_cgi_navigator() run_cgi_menu() run_cgi_command_help() run_cgi_options() html_end() ここで html_start() は、 ようするに HTML の先頭部分、たとえば DOCTYPE から BODY あたりを、 html_end() は /BODY と /HTML を表示する部分をカスタマイズするために用います。 run_◎◎ メソッド群では BODY の部分を定義しています。 $curproc の run() メソッドは html_start() run_cgi_XXX() 群を実行(テーブル状に出力を配置する) html_end() を順番に実行しています。 つまり CGI プロセスの実行のフロー( FML::Process::Flow 参照)は new() prepare() verify_request() run() html_start() run_cgi_○○() html_end() finish() ということになります。 CGI の画面の作りとメソッド fml CGI スクリプトでは典型的な画面が次のように分割されると考えています。 ヘッダ ◎ メニュー ◎ バー1 メイン バー2 ◎ メニュー ◎ フッタ なお、バー1と2の部分は navigation などと呼ばれます。 ヘッダ部分( HTTP ヘッダではなく、HTML の DOCTYPE から BODY あたり) やフッタの部分は html_start() および html_end() で HTML コードを生成するでしょう。 BODY の中身は真中の3x3のテーブル状の部分で、run_cgi() から呼ばれる メソッドが生成しています。 run_cgi() の中身をもっと細かくすることと、 画面上のどの部分をどのメソッドが記述するのかを指定できる アクセスメソッドが必要です。 また BODY の中身も、これにあわせて、より細かく nw north ne west center east sw south se という3x3の精度で表現されています。 画面とトランポリン機構 CGI の表示部分は FML::Command:: 以下のクラスに移動させます。 しかしながら、 FML::Command:: の中に実体があるとは限らず object composition の形式で FML::CGI:: クラスが提供するメニュー生成クラスを 使うことになるでしょう。 たとえば subscribe の場合 FML::CGI::Admin::Main → FML::Command::Admin::subscribe → FML::CGI::Admin::User → メニューの表示 などとなっていて、Mach のトランポリン機構のように、いったりきたりしま す。 備考: FML::CGI::Admin:: ではハードコーディングするしかない? 例えば FML::CGI::Admin::User では $comname と maps の関係がハードコーディングされてるけれど、 でも、これはしかたないんじゃないかなぁ… config に追い出すと、とてつもなくいっぱい変数が必要になりそうだ。