確認画面の実装

WEBでよくある登録・修正・削除の際の確認画面の実装をしてるんだけど、これ結構メンドクサイ。

確認画面の例として、Mixiだったら日記を登録する際に、登録確認画面があって、それで問題なければ実際にDBに登録を行ってる。

確認画面を作ると、以下の2フローに分かれる。
1. 書き込み→確認画面→本登録
2. 書き込み→確認画面→書き込み修正→確認画面→本登録


確認画面にはテキストエリアがなく、テーブルタグの中に本文などを表示しているだけなので、確認画面から本登録へデータをPOSTすると本文データがPOSTされない。Mixiとかどうやってやってるのかなと確認したら、やはりhiddenタグにPOSTする内容を全て格納していた。
ということで、hiddenタグにも本文データをセットする。確認画面ではフォームのテキストエリアなどがないので、HTML::FillInFormを使ってPOSTされた値をそのまま表示するってのが出来ない。なので、POSTされたデータを、HTMLファイルに代入して(HTML::Templateのに入れて)表示した。

この確認画面の処理、もうちょっと楽にするモジュールがないかなと思ったんだけど、それっぽいのが発見できなかった。
HTML::FillInFormみたいにお手軽に出来るモジュールがほしいので、そのうち作ろう。動きとしては以下のような感じかな。

POSTされたデータを元に、引数で与えられたHTMLテンプレートに値を自動セット。HTMLテンプレートがHTML::Templateで、中身にがある場合、$cgi->param("hoge")の値が"本文です"となっている場合、キーとなるhogeでマッチングさせて、param("hoge")>となるようにして、表示は"本文です"と表示されるようにする。

画面表示するデータはタグをエスケープし、改行コードを改行タグに変換。
同時に、hiddenタグのvalueにも値をセット(ここはタグエスケープのみ行い、改行タグ変換は行わない。)

1のパターンは、確認画面から、本登録処理にPOSTしたデータに対して、タグのエスケープと改行コードを改行タグに変換させてDB登録する。


2のパターンは、確認画面から書き込み修正画面に戻した時に、書き込み内容をフォームのテキストエリアに入れる(補完)処理をしている。これは、確認画面のhiddenのvalueを取得し、それをFillInForm使ってフォームのテキストエリアに流し込みしている。

1,2のパターンは、全ての画面の処理で、該当記事へのアクセスか毎回アクセスチェックする。