2013-03-16 78 views
0

我在drupal7中創建表單。Drupal複選框創建

我需要的是:我有類別和子類別。我在複選框列出這些像

enter image description here

我使用的代碼作爲

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

); 

這裏$ sub_tal是一個數組。如果它是單維數組,它可以正常工作。這裏如何傳遞一個數組(該類別的子類別來自db)。如何使用此代碼維護此結構。

請幫助我謝謝。

回答

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') 

您可以更改通過更改提交給提交處理程序的複選框的值我在上面的每個複選框上設置了10個屬性。

提交的值不僅因爲它們全都在$form['categories']部分內,而且因爲#tree設置爲TRUE

+0

您的解決方案在顯示方面效果很好。但我需要的類別是複選框而不是複選框。因此,複選框的名稱將類似於[],以便我可以通過後置方式獲取值,並且對於所有子類別[子類別]的子類別都是相同的。可能嗎?請指教。謝謝 – 2013-03-16 12:49:28

+0

你所描述的是可能通過多個表單元素。對於類別和子類別,您希望如何格式化返回的數據?像'$ form_state ['category'] = array('cat1','sub1','sub2')'等等或像$ form_state ['category'] = array('cat1' ,'cat2',array('sub1','sub2','sub21'))'etc? – Aiias 2013-03-16 20:03:10

+0

所有在一個數組應該是好的,但外觀應該像圖像。所以一切都應該在一個複選框標題下。 – 2013-03-18 05:51:27