【问题标题】:get values from form API checkboxes从表单 API 复选框中获取值
【发布时间】:2010-07-30 11:50:30
【问题描述】:

这是我正在开发的用于创建自定义过滤搜索的模块。但我不知道如何获取表单类型复选框的值...我搜索了但还没有!

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

}

【问题讨论】:

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


    【解决方案1】:

    如果您尝试获取表单构建器中包含在$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,
    );
    

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

    【讨论】:

      猜你喜欢
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      相关资源
      最近更新 更多