Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Drupal中将元素形成数组_Drupal_Drupal 6_Drupal Fapi - Fatal编程技术网

在Drupal中将元素形成数组

在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[

使用Drupal6.20

我们可以设置一些表单元素,如下所示:-

<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)