[PHP-users 27881] HTML_QuickForm + Smarty による 可変数のテキストボックス出力

T Kammori kammoridensya @ yahoo.co.jp
2005年 12月 21日 (水) 11:10:51 JST


いつもお世話になっております。
TKと申します。

HTML_QuickForm + Smarty を使用し、
・ユーザーの選択値によって
・テキストボックスの数が変動する
入力フォームを作成しております。

その実装方法について(主にSmarty側の記述方法)、悩んでおり
ます。
同じようなことを悩まれた方がおられましたら、
ご教授願えないでしょうか。


・実装例1

 -------- HTML_QuickForm作成側 -----------
 for ($i = 1; $i <= $usr_cnt; $i++) {
    $o_form->addElement('text', "usr_name{$i}", null,
null);
 }

 ※ テキストボックス名に連番をつけています。

 -------- Smarty側 -----------
 {if $book_info.room_cnt >= 1}
    {$form.usr_name1.html}
 {/if}
 {if $book_info.room_cnt >= 2}
    {$form.usr_name2.html}
 {/if}
    ・・・以下略

 -------- 結果 -----------
 意図した動作はしますが、 
 どう考えてもスマートな方法ではない気がします。
 


・実装例2

 -------- HTML_QuickForm作成側 -----------
 for ($i = 1; $i <= $usr_cnt; $i++) {
    $o_form->addElement('text', "usr_name[]", null, null);
 }

 ※ テキストボックス名に [] を付け、配列にしています。

 -------- Smarty側 -----------
 {section name=i loop=$form.usr_name}
    {$form.usr_name[i].html}
 {/section}

 -------- 結果 -----------
 ・入力画面には 意図どおりの数のテキストボックスが出力さ
れます。
 ・確認画面へ遷移した際、freezeする・しないにかかわらず
、入力値をセットできません。

 ※ freeze しない場合、値なしのテキストボックスが 指定数
分出力されます。
 ※ freeze した場合、  値なしのhiddenが出力されています
。

 ※ var_dump($o_form) を確認したところ、
    [submit_values]の中に入力値が入っていました。

 ※ 単独のテキストボックスでの正常動作は確認済みです。



***
ループ + echo では、HTML_QuickForm を使用する意味がなく
なってしまうと
思いますし・・

HTML_QuickForm + Smartyをお使いの皆様は、
どのような方法を用いておられるのでしょうか。

ご教授いただけますようお願いいたします。
よろしくお願いいたします。



PHP-users メーリングリストの案内