0

我在drupal7中有表格。

我需要的是:我有类别和子类别。我必须在复选框中列出这些,例如

在此处输入图像描述

我将代码用作

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

 );

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

请帮帮我谢谢。

4

1 回答 1

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']);
}

呈现为:

类别 image2

提交表单时,假设选中了一些复选框,$submitted_values如下所示:

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

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

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

于 2013-03-16T07:26:38.430 回答