0

私はdrupal7でフォームを持っています。

私が必要とするのは、カテゴリとサブカテゴリがあります。これらを次のようなチェックボックスにリストする必要があります

ここに画像の説明を入力

コードを次のように使用しました

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

 );

ここで $sub_tal は配列です。一次元配列であれば問題なく動作します。ここで配列を渡す方法(カテゴリ、サブカテゴリはdbから来ました)。このコードでこの構造を維持する方法。

助けてくださいありがとう。

4

1 に答える 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 に答える