2012-03-31 2 views
1

J'ai un formulaire dans drupal qui télécharge des images et a peu de cases à cocher dedans. Voici la forme:ne peut pas obtenir la valeur des cases à cocher en utilisant drupal formulaire 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.') 
); 

et voici ma fonction d'envoi où je suis en train de traiter le téléchargement d'images et de saisir la valeur des cases à cocher ainsi. J'obtiens le message de réussite et l'image est téléchargée mais n'obtient pas la valeur des cases à cocher.

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

Répondre

5

Lorsque vous utilisez #options sur un élément REATB la valeur passée à la $form_stateest la clé du tableau, de sorte que vous n'avez pas besoin d'utiliser array_keys().

Je ne sais pas pourquoi vous utilisez checkboxes pour un oui/non, habituellement on utiliserait un élément simple checkbox. Toutefois, si c'est vraiment ce que vous voulez faire:

  1. Votre #options ne peut pas contenir sur l'option avec 0 comme la clé du tableau, il sera automatiquement filtré et vous ne saurez jamais si cette option a été cochée. Vous devez utiliser $heating_options_chosen = array_filter($form_state['values']['heating'] pour obtenir les options de case à cocher sélectionnées.

Je pense honnêtement votre code devrait ressembler à ceci que:

$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 à l'aide des cases à cocher parce que je voulais l'utiliser comme un groupe de case à cocher. – Maverick

+0

ah ok cela fait plus de sens, heureux que la réponse a aidé de toute façon – Clive

+1

Comment faire pour basculer un champ de texte en fonction de la valeur/options de case à cocher? @Clive –

Questions connexes