Drupal自定义模块/表单问题:添加字段数组

时间:2011-04-24 18:07:29

标签: drupal forms drupal-modules

我正在创建一个自定义模块,我希望为特定字段添加“添加其他项目”功能,但我似乎无法弄清楚我需要做什么才能完成此任务。我一直在浏览Drupal论坛和他们的Forms API参考,但我一定不能得到一些东西....我正在使用Drupal 6.20,在我的模块中,我尝试过:

  $form['options'] = array(
    '#title' => t('Options'),
    '#type' => 'fieldset',
  );
  $form['options']['address'] = array(
    '#type'=>'textfield',
    '#title'=>t('Address'),
    '#tree' => 1,
  );

想我会得到一个看起来像这样的文字输入:

<input type="text" class="form-text text" value="" size="60" id="edit-address-0-value" name="address[0][value]">

但是,我只是得到一个看起来像这样的输入:

<input type="text" class="form-text" value="" size="60" id="edit-address" name="address" maxlength="128">

2 个答案:

答案 0 :(得分:1)

您需要在要复制的元素上方的元素上设置#tree。 FAPI将值从该元素向下存储在树结构中。

答案 1 :(得分:0)

要获得类似address[0][value]的名称,您需要类似

的内容
  $form['options']['address'] = array(
    '#tree' => TRUE,
  );
  $form['options']['address'][0] = array(
    '#tree' => TRUE,
  );
  $form['options']['address'][0]['value'] = array(
    '#type'=>'textfield',
    '#title'=>t('Address'),
  );

但是除非您实际尝试实现多值分组字段,或者您的字段具有使用多个PHP值实现的复杂(自定义)数据类型(即纬度/),否则您不需要[value]部分经度,开始/停止日期等。)。

您可能还需要将值的数量存储在$form['options']['#nb_values']或隐藏字段中(如果您打算使用JavaScript将其他字段添加到表单中)。