2011-01-27 2 views
0

Drupal 6.20の使用。私はDrupalの中で同じことをしようとしていますDrupalの配列としてのフォーム要素

foreach ($somename as $name) { ... } 

<input type="select" name="somename[]"><option>ohai</option></select> 

、その後、PHPでそれらを循環 - :

我々は、セットアップ、このようないくつかのフォーム要素をすることができます。私はselect-elementsという同じスタイルのリストを持っています。将来、要素の数が変化し、フォーム処理が動的でなければならない可能性があります。

上記の方法を使用すると、各要素は前の要素を上書きして、最終的には1つの要素のみが画面に表示されます。配列として$somenameを解釈しないので、私はname="somename[$someid]"と書くことはできません。
Drupalはこれをサポートしていますか、それとも私はそれをやっていますか?

また、これを達成するための他の方法はありますか?

答えて

5

あなたがしようとしていることを達成するための例です。あなたの&検証機能を提出して


function test_form(&$form_state) 
{ 
    $form = array(); 
    $delta = 0; 
    $form["test_field"]["#tree"] = TRUE; 
    $form["test_field"][$delta++] = array(
     "#type" => "textfield", 
     "#title" => "Title", 
    ); 
    $form["test_field"][$delta++] = array(
     "#type" => "textfield", 
     "#title" => "Title", 
    ); 
    $form["test_field"][$delta++] = array(
     "#type" => "textfield", 
     "#title" => "Title", 
    ); 
    $form["submit"] = array(
     "#type" => "submit", 
     "#value" => "Submit", 
    ); 
    return $form; 
} 

、あなたのフィールド名の下の値の配列を取得します。

あなたの要素で#treeを有効にすることは、このアプローチの鍵です。また、DrupalのフォームAPIは、私が扱っている最高のフォームフレームワークの1つです。

これが役に立ちます。

+0

:あなたの$ form_state [「値を」]提出する際

function test_form() { $form['#tree'] = TRUE; // This is to prevent flattening the form value $no_of_fields = 5; // The number of fields you wish to have in the form // Start adding the fields to the form for ($i=1; $i<=$no_of_fields; $i++) { $form['somename'][$i] = array( '#title' => t('Test field no. '.$i), '#type' => 'textfield', ); } // Add the submit button $form["submit"] = array( "#type" => "submit", "#value" => "Submit", ); } 

配列としてあなたのフォーム要素の値(他のものの間で)含まれていますフォームのフィールド名を入力し、文字列を操作して新しいjavascriptを作成します。... bleh ... –

2

私はこの質問に答えましたが、それほど冗長ではない簡単な方法があり、フィールドの数を変更する(またはフォームを取得する際に引数として渡す)必要があると思います。私は初期に_1を置く前にこれを見ていた希望

'somename' => 
    array 
     1 => string '' (length=0) 
     2 => string '' (length=0) 
     3 => string '' (length=0) 
     4 => string '' (length=0) 
     5 => string '' (length=0) 
関連する問題