2012-03-31 53 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