2012-03-31 24 views
1

我在drupal中有上載圖像的表單,並且其中有幾個複選框。 這裏是形式:無法使用drupal表單api獲取複選框的值

$form['checklist_fieldset'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Check List'), 
    '#collapsible' => FALSE, 
    '#collapsed' => FALSE, 
); 
$form['checklist_fieldset']['heating'] = array(
    '#type' => 'checkboxes', 
    '#title' => t('Heating options'), 

    '#options' => array(
    '0' => t('Yes'), 
    '1' => t('No') 
), 
    '#description' => t('Heating details.') 
); 

這裏是我提出我在哪裏處理上傳圖片,並搶得的複選框值以及功能。我收到成功消息,圖像正在上傳,但沒有獲得複選框的值。

function property_add_view_submit($form,&$form_state){ 
$validators = array(); 



if($file = file_save_upload('p_file1',$validators,file_direcotry_path)){ 
$heating = array_keys($form_state['values']['heating']); 
drupal_set_message(t('Property Saved! '.$heating)); 
dpm($form_state['values']['heating']); 
} 

回答

5

當您在FAPI元素上使用#options傳遞給$form_state數組鍵,這樣你就不需要使用array_keys()

我不確定你爲什麼使用checkboxes是/否,通常會使用簡單的checkbox元素。然而,如果這真的是你想要做什麼:

  1. #options不能含有與0選項作爲數組鍵,它會自動過濾掉,你永遠不會知道,如果該選項已經被選中。
  2. 您應該使用$heating_options_chosen = array_filter($form_state['values']['heating']來獲取選中的複選框選項。

老實說,我認爲你的代碼應該是這樣的,但:使用複選框

$form['checklist_fieldset']['heating'] = array(
'#type' => 'checkbox', 
'#title' => t('Heating options'), 
'#options' => array(
    '1' => t('Yes'), 
    '0' => t('No') 
), 
    '#description' => t('Heating details.') 
); 



$heating_checked = $form_state['values']['heating'] == 1; 
+0

well..iam,因爲我想用它作爲一個複選框組。 – Maverick 2012-03-31 13:25:08

+0

啊好吧,這是更有意義,很高興答案無論哪種方式 – Clive 2012-03-31 14:57:16

+1

如何切換文本字段取決於複選框的值/選項? @Clive – 2013-04-18 11:50:02