2012-03-31 11 views
1

Ich habe Formular in Drupal, die Bilder hochlädt und hat einige Kontrollkästchen drin. Hier ist die Form:kann nicht Kontrollkästchen Werte mit drupal Formular 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.') 
); 

und hier ist meine einreichen Funktion, wo ich bin Hochladen von Bildern verarbeiten und auch das Kontrollkästchen Wert Grabbing. Ich erhalte die Erfolgsmeldung und das Bild wird hochgeladen, erhält aber nicht den Wert der Kontrollkästchen.

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

Antwort

5

Wenn Sie #options auf einem FAPI Elemente verwenden Sie den Wert an die $form_stategeben wird, ist der Array-Schlüssel, so dass Sie brauchen nicht array_keys() zu verwenden.

Ich bin mir nicht sicher, warum Sie checkboxes für ein Ja/Nein verwenden, normalerweise würde man ein einfaches checkbox Element verwenden. Aber wenn das wirklich das, was Sie tun möchten:

  1. Ihre #options kann nicht auf Option enthalten mit 0 als Array-Schlüssel, wird sie automatisch herausgefiltert werden, und Sie werden nie wissen, ob diese Option aktiviert ist.
  2. Sie sollten $heating_options_chosen = array_filter($form_state['values']['heating'] verwenden, um die ausgewählten Kontrollkästchenoptionen zu erhalten.

Ich denke ehrlich, Ihr Code wie dieser allerdings aussehen sollte:

$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 Checkboxen, weil ich es als eine Kontrollkästchen-Gruppe verwenden wollte. – Maverick

+0

ah ok das macht mehr Sinn, froh, dass die Antwort in beide Richtungen geholfen – Clive

+1

Wie ein Textfeld abhängig von den Wert/Optionen der Checkbox umschalten? @Clive –