views:

26

answers:

1

This is a module that I'm working on to create a custom filtered search. But i have no idea on getting the values of form type checkboxes... I searched but nothing yet!

<?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;

}
+1  A: 

If you are trying to get the value for the form field that in the form builder is contained in $form['name']['filter']['node_options'], then in the submission handler you need to use $form_state['values']['node_options'].

Also the menu callback should be changed to

$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,
);

There is no need to define two functions, where the first call the second one, to define a form builder.

kiamlaluno