Drupal复选框创建

时间:2013-03-16 06:53:08

标签: php drupal

我在drupal7中有表格。

我需要的是:我有类别和子类别。我必须在

之类的复选框中列出这些内容

enter image description here

我将代码用作

 $form['rate_the_room']['talent'] = array(
   '#prefix'=>'<h1>category:</h1>',
    '#type' => 'checkboxes',
    '#options' => $sub_tal,

 );

这里$ sub_tal是一个数组。如果它是单维数组,它可以正常工作。这里如何传递数组(类别,子类别来自db)。如何使用此代码维护此结构。

请帮助我谢谢。

1 个答案:

答案 0 :(得分:1)

为什么这些都需要在一个表单元素中有什么特别的原因吗?如果您的数据设置正确,您只需循环遍历它们并以有条理的方式创建元素。

function my_test_form($form_state) {
  // Assuming you have your data in a format like this
  $categories = array(
    'cat1' => array(
      '#title' => 'category 1',
      'sub1' => 'Subcat1',
      'sub2' => 'Subcat2',
    ),
    'cat2' => array(
      '#title' => 'category 2',
      'sub21' => 'Subcat21',
      'sub22' => 'Subcat22',
    ),
    'cat3' => 'category 3',
  );

  $elements = array();

  foreach ($categories as $cat => $data) {
    // If multidimensional, create parent and loop through children
    if (is_array($data)) {
      $elements[] = array(
        '#type' => 'checkbox',
        '#title' => $data['#title'],
        '#return_value' => $cat,
      );

      foreach (element_children($data) as $subcat) {
        $elements[] = array(
          '#type' => 'checkbox',
          '#title' => $data[$subcat],
          '#attributes' => array(
            'style' => 'margin-left: 2em',
          ),
          '#return_value' => $cat . '-' . $subcat,
        );
      }

    }
    // Else, just create top level
    else {
      $elements[] = array(
        '#type' => 'checkbox',
        '#title' => $data,
        '#return_value' => $cat,
      );
    }
  }

  // Group all of these elements together. They'll be submitted into the same array.
  $form['categories'] = $elements;
  $form['categories']['#tree'] = TRUE;
  $form['categories']['#prefix'] = '<div style="font-weight:bold" class="label">' . t('Checkboxes title') . ':</div>';

  $form['submit'] = array(
    '#value' => t('Submit me'),
    '#type' => 'submit',
  );
  return $form;
}

function my_test_form_submit($form, &$form_state) {
  $submitted_values = array_filter($form_state['values']['categories']);
}

呈现为:

Categories image2

提交表单时,假设选中了一些复选框,$submitted_values看起来像这样:

array('cat2', 'cat2-sub21', 'cat2-sub22')

您可以更改我在上面每个复选框上设置的#return_value属性,更改提交给提交处理程序的复选框的值。

提交的值组合在一起,不仅因为它们都在$form['categories']部分内,而且因为#tree设置为TRUE