Drupal中的数组形式的数组元素

问题描述 投票:0回答:3

使用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是支持还是我正在做?

此外,还有其他替代方法可实现相同目标吗?

drupal drupal-6 drupal-fapi
3个回答
6
投票

这里是实现您要完成的任务的示例。


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也是我使用过的最好的表单框架之一。

希望这会有所帮助。


2
投票

我知道已经回答了这个问题,但是我认为有一种更简单的方法,它不需要那么冗长,您只需要更改字段数(或在获取表单时将其作为参数传递。)

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)

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

请帮助我解决此问题。谢谢

© www.soinside.com 2019 - 2024. All rights reserved.