在Drupal中将元素形成数组
使用Drupal6.20 我们可以设置一些表单元素,如下所示:-在Drupal中将元素形成数组,drupal,drupal-6,drupal-fapi,Drupal,Drupal 6,Drupal Fapi,使用Drupal6.20 我们可以设置一些表单元素,如下所示:- <input type="select" name="somename[]"><option>ohai</option></select> 我正试图在Drupal中做同样的事情。我有一个样式相同的选择元素的列表。元素的数量将来可能会改变,因此表单处理必须是动态的 如果我使用上述方法,每个元素将覆盖前面的元素,因此最终只有一个元素打印到屏幕上。我无法编写name=“somename[
<input type="select" name="somename[]"><option>ohai</option></select>
我正试图在Drupal中做同样的事情。我有一个样式相同的选择元素的列表。元素的数量将来可能会改变,因此表单处理必须是动态的
如果我使用上述方法,每个元素将覆盖前面的元素,因此最终只有一个元素打印到屏幕上。我无法编写name=“somename[$someid]”
,因为这不会将$somename
解释为一个数组。
Drupal是否支持此功能,或者我是否正在这样做
此外,还有其他方法可以达到同样的效果吗?这里有一个例子来实现您正在尝试的目标
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;
}
在submit&validate函数中,您将在字段名称下获得一个值数组
记住,在元素上启用#树是这种方法的关键。Drupal的表单API也是我使用过的最好的表单框架之一
希望这能有所帮助。我知道这个问题已经得到了回答,但我认为有一种更简单的方法,它不太冗长,您只需要更改字段的数量(或者在获取表单时将其作为参数传递)
我希望我在将_1放在初始表单字段名上之前看到过这一点,然后通过字符串操作使用新的javascript创建的字段来增加它……呜呜。。。
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;
}
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",
);
}
'somename' =>
array
1 => string '' (length=0)
2 => string '' (length=0)
3 => string '' (length=0)
4 => string '' (length=0)
5 => string '' (length=0)