从表单API复选框中获取值

时间:2010-07-30 11:50:31

标签: drupal-6 drupal-modules drupal-forms

这是我正在创建自定义过滤搜索的模块。但我不知道获取表单类型复选框的值...我搜索但没有任何内容!

<?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 个答案:

答案 0 :(得分:2)

如果您尝试获取表单构建器中包含在$form['name']['filter']['node_options']中的表单字段的值,则在提交处理程序中需要使用$form_state['values']['node_options']

此外,菜单回调应更改为

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

没有必要定义两个函数,第一个调用第二个函数来定义表单构建器。