【问题标题】:Drupal programatically create a form with a for conditionDrupal 以编程方式创建带有 for 条件的表单
【发布时间】:2018-07-09 06:56:41
【问题描述】:

我正在尝试创建一个表单来创建一个人,而这个人可能与另一个人有某种关系(比如妻子、丈夫、孩子……),所以我尝试使用添加按钮来创建一些东西一个关系,这是我的代码:

if (empty($form_state['number_liaisons'])) {
  $form_state['number_liaisons'] = 1;
}

$form['info_contact']['liaison'] = array(
  "#type" => "fieldset",
  "#title" => "Liaisons",
  "#attributes" => array("class" => array("center"))
);

for ($i = 1; $i <= $form_state['number_liaisons']; $i++) {
  $form['info_contact']['liaison'][$i] = array(
    "#type" => "fieldset",
    "#title" => "Liaison",
    "#attributes" => array("class" => array("center"))
  );

  $form['info_contact']['liaison'][$i]['contact'] = array(
    '#type' => 'textfield',
    '#title' => t("Personne a lier"),
    '#autocomplete_path' => 'crm/autocomplete_liaison',
  );

  $form['info_contact']['liaison'][$i]['type'] = array(
    '#type' => 'select',
    '#title' => t("Type de liaison"),
    '#options' => Array('enfant' => 'Enfant', 'conjoint' => 'conjoint'),
    '#empty_option' => t('- Choisir un type de liaison -'),
  );
}

$form['info_contact']['liaison']['add_item'] = array(
  '#type' => 'submit',
  '#value' => t('Add liaison'),
  '#submit' => array('liaison_add_item'),
  '#limit_validation_errors' => array(),
);

if ($form_state['number_liaisons'] > 1) {

  $form['info_contact']['liaison'] = array(
    '#type' => 'submit',
    '#value' => t('Remove liaison'),
    '#submit' => array('liaison_remove_item'),
    '#limit_validation_errors' => array(),
  );
}

以及添加/删除关系的两种方法:

function liaison_add_item($form, &$form_state)
{
  $form_state['number_liaisons']++;
  $form_state['rebuild'] = true;
}

function liaison_remove_item($form, &$form_state)
{
  if ($form_state['number_liaisons'] > 1) {
    $form_state['number_liaisons']--;
  }

  $form_state['rebuild'] = true;
}

我的问题是,当我单击“添加联络人”按钮时,所有字段都消失了,而当我单击删除联络人时,字段又回来了。 因此,当我的 $form_state['number_liaisons'] 中有超过 1 个时,for 不会显示我的字段。

有人知道怎么解决吗?

【问题讨论】:

    标签: forms drupal drupal-7


    【解决方案1】:

    我认为这是因为联络员都共享相同的字段名称,$form_state 并不真正关心它们是否嵌套。所以尝试重命名为;

    ["contact_{$i}"] 而不仅仅是 ['contact']

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-03
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      相关资源
      最近更新 更多