CodeIgniter で編集画面,つまりデータベースに登録されているデータを編集する画面をつくる方法をメモしておく。
以前の記事と同様に,テンプレートパーサとして Smarty を使っている前提とする。
編集画面は,最初に表示するときはデータベースから取り出した値を初期値として表示するが,一回送信されて form_validation でエラーになった場合は,送信されたデータを初期値にしなければならない。
まず,編集画面のビューの form タグより前で次のようにして,Smarty に渡された出力変数を取得する。
<?php $vars = $this->smarty_parser->_tpl_vars; ?>
これに対して,コントローラから
$data = array(
'namae' => $namae,
'question' => $question
);
$this->smarty_parser->parse('ci:<ビュー>.tpl', $data);
のようにして値を渡すことで,ビューの連想配列 $vars に値が入る。
そしていつもどおり form タグをオープンする。
<?php echo form_open('<送信先>'); ?>
次がミソである。input タグを次のようにし,初回は DB から取得した値を,form_validation エラーによる再表示時はフォームから送信された値を初期値にする。
<input type="text" name="namae" value="<?php echo set_value('namae', $vars['namae']); ?>" />
select の場合は次のようにする。
<select name="question">
<option <?php echo set_select('question', 'はい', ($vars['question'] == 'はい')); ?>>はい</option>
<option <?php echo set_select('question', 'いいえ', ($vars['question'] == 'いいえ')); ?>>いいえ</option>
</select>
コントローラや確認画面のビューは以前と同じようにすれば良い。
以上のテクニックで編集画面を実装できる。それにしても面倒なので,それ用のヘルパでも作ろうかな……。
コメント
それ用のヘルパでも作ってくれ