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

OHGUMA Hidekazu ohguma @ c-rcs.jp
2005年 12月 21日 (水) 13:35:43 JST


ohgumaです。

私はこんな形で処理しています。
他の方がどのようにしているのか私も興味があります。
freeze時にはhiddenに値が入っています。

---HTML_QuickForm----
for($i=1; $i<= $num; $i++) {
  $form->addElement('text', 'text[' . $i . ']', null, null);
}

----Smarty----
{foreach key=no item=row from=$form.text}
テキスト{$no}:{$form.text[$no].html}<br>
{/foreach}


入力されたデータは配列として取得しています。
----
$text =& $form->getSubmitValue('text');


(環境)
PHP:4.4.1
Smarty:2.6.11
HTML_QuickForm:3.2.5

T Kammori wrote:
> いつもお世話になっております。
> 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をお使いの皆様は、
> どのような方法を用いておられるのでしょうか。

--
OHGUMA Hidekazu


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