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のパターンは、全ての画面の処理で、該当記事へのアクセスか毎回アクセスチェックする。