2010-07-30 4 views
0

Il s'agit d'un module sur lequel je travaille pour créer une recherche filtrée personnalisée. Mais je n'ai aucune idée sur l'obtention des valeurs des cases à cocher de type de formulaire ... j'ai cherché mais rien encore!obtenir des valeurs à partir des cases à cocher de l'API de formulaire

<?php 

function my_module_menu() { 
    $items = array(); 
    $items['my_module/form'] = array(
    'title' => t('My form'), 
    'page callback' => 'my_module_form', 
    'access arguments' => array('access content'), 
    'description' => t('My form'), 
    'type' => MENU_CALLBACK, 
); 
    return $items; 
} 

function my_module_form() { 
    return drupal_get_form('my_module_my_form'); 
} 

function my_module_my_form($form_state) { 
    $form['name'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Search'), 
    '#collapsible' => TRUE, 
    '#collapsed' => FALSE, 
); 

    // Removes the #required property and 
    // uses the validation function instead. 
    $form['name']['first'] = array(
    '#type' => 'textfield', 
    '#title' => t('Search'), 
    '#default_value' => "Keyword", 
    '#description' => "Please enter your keyword.", 
    '#size' => 20, 
    '#maxlength' => 20, 
); 
$form['name']['filter'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Filter'), 
    '#collapsible' => TRUE, 
    '#collapsed' => TRUE, 
); 
    $form['name']['filter']['node_options'] = array(
    '#type' => 'checkboxes', 
    '#title' => t('Default options'), 
    '#default_value' => variable_get('node_options', 0), 
    '#options' => array(
    '31' => t('Chinese'), 
    '28' => t('South Indian'), 
    '18' => t('Pizza'), 

    ), 
    '#description' => t('Filter the results.'), 
); 

    $form['name']['submit'] = array(
    '#type' => 'submit', 
    '#value' => 'Submit', 
); 
    // Adds a new button to clear the form. The #validate property 
    // directs the form to use a new validation handler function in place 
    // of the default. 
/* $form['clear'] = array(
    '#type' => 'submit', 
    '#value' => 'Reset form', 
    '#validate' => array('my_module_my_form_clear'), 
);*/ 

    return $form; 
} 

// This is the new validation handler for our Reset button. Setting 
// the $form_state['rebuild'] value to TRUE, clears the form and also 
// skips the submit handler. 
function my_module_my_form_clear($form, &$form_state) { 
    $form_state['rebuild'] = TRUE; 
} 


//block 
function my_module_block($op = 'list', $delta = 0, $edit = array()) { 
    $block = array(); 

    switch ($op) { 
    case 'list': 
     $block[0]['info'] = t('Custom search form'); 
     break; 
    case 'view': 
     switch ($delta) { 
     case 0: 
      $block['subject'] = t('Custom search'); 
      $block['content'] = drupal_get_form('my_module_my_form'); 
      break; 
     } 
     break; 
    } 

    return $block; 
} 










function my_module_my_form_submit($form, &$form_state) { 
    $redirect_url = 'search/node/'; 
    $redirect_url .= ' category:' . $form_state['values']['filters']; 
    $redirect_url .= ' %' . $form_state['values']['first'] . '%'; 

    $form_state['redirect'] = $redirect_url; 

} 

Répondre

2

Si vous essayez d'obtenir la valeur du champ de formulaire dans le générateur de forme est contenu dans $form['name']['filter']['node_options'], puis dans le gestionnaire de soumission vous devez utiliser $form_state['values']['node_options'].

également le rappel de menu doit être changé pour

$items = array(); 
$items['my_module/form'] = array(
    'title' => t('My form'), 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('my_module_form'), 
    'access arguments' => array('access content'), 
    'description' => t('My form'), 
    'type' => MENU_CALLBACK, 
); 

Il n'y a pas besoin de définir deux fonctions, où le premier appel de la deuxième, de définir un générateur de formulaire.

Questions connexes