使用Drupal 6.20。
我们可以设置一些表单元素,例如:-
<input type="select" name="somename[]"><option>ohai</option></select>
然后在PHP中循环使用
foreach ($somename as $name) { ... }
我正试图在Drupal中做同样的事情。我有一个样式相同的select-elements
列表。将来元素的数量可能会发生变化,因此表单处理必须是动态的。
如果使用上述方法,则每个元素都将覆盖前一个元素,因此最终只有一个元素被打印到屏幕上。我不能写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函数中,您将在字段名称下获得一个值数组。
请记住,在元素上启用#tree是此方法的关键。 Drupal的表单API也是我使用过的最好的表单框架之一。
希望这会有所帮助。
我知道已经回答了这个问题,但是我认为有一种更简单的方法,它不需要那么冗长,您只需要更改字段数(或在获取表单时将其作为参数传递。)
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",
);
}
[提交您的$ form_state ['values']将会(其中包括)您的表单元素值作为数组:
'somename' =>
array
1 => string '' (length=0)
2 => string '' (length=0)
3 => string '' (length=0)
4 => string '' (length=0)
5 => string '' (length=0)
@@ SarfarazSoomro,@ mkjeldsen这对您来说可能是一个愚蠢的问题。但是我真的是新来的api。这是一个很好的答案。如何将#default_value => $ ExExCode转换为数组?我正在尝试显示数据库中的字段,并且正在使用以下代码:
'#type' => 'textfield',
'#title' => t("Experiment #"),
'#default_value' => isset($form_state['values']['ExExCode']) ? $form_state['values']['ExExCode'] : $pic_code,
'#size' => 8,
'#required' => TRUE,
);
$form['ExExCode_pis'] = array(
'#type' => 'value',
'#title' => t("Experiment #:"),
'#value' => $ExExCode_pis,
);
并且我想显示ExExCode = 200804N和200804S。当我尝试应用以下逻辑时,答案将是2。
$count_qry = db_query("select COUNT(ExExCode) as expcount from experiments where ExExCode LIKE '%%%s%%';", $pic_code);
$exp_exists = db_fetch_object($count_qry);
drupal_set_message("# records:" . $exp_exists->expcount);
请帮助我解决此问题。谢谢