创建一个自定义搜索表单drupal

时间:2010-07-30 02:34:12

标签: drupal search forms

我想在块中的drupal主题上添加自定义搜索选项。它将是一个带有文本框和几个复选框的表单。提交时表单必须执行的所有操作都是:根据复选框状态生成搜索网址。

  

http://localhost/restaurant/search/node/type:restuarant类别:34,38%关键字%

关键字将是搜索框中的文本,将根据复选框状态添加类别。我知道在一个普通的PHP网站上做这个,但不知道如何在我的drupal主题中实现这一点。

我检查了表单api,我理解在模块中创建表单...并通过类似

的URL访问它
  

http://localhost/restaurant/my_module/form

但是我没有得到任何关于如何将它放在模板中的块中的线索。

1 个答案:

答案 0 :(得分:4)

实施hook_block(),使用$form['#submit']在表单中设置自定义提交处理程序,并在自定义提交处理程序中将$form_state['redirect']设置为自定义网址。例如:

function mymodule_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('mymodule_custom_search_form');
          break;
      }
      break;
  }

  return $block;
}

function mymodule_custom_search_form($form_state) {
  $form = array();

  $form['keyword'] = array(
    '#type' => 'textfield',
    '#title' => t('Keyword'),
    '#required' => TRUE,
  );
  $form['category'] = array(
    '#type' => 'textfield',
    '#title' => t('Categories'),
    '#required' => TRUE,
  );
  $form['type'] = array(
    '#type' => 'textfield',
    '#title' => t('Type'),
    '#required' => TRUE,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Search'),
  );

  $form['#submit'] = array('mymodule_custom_search_form_submit');

  return $form;
}

function mymodule_custom_search_form_submit($form, &$form_state) {
  $redirect_url = 'search/node/';
  $redirect_url .= 'type:' . $form_state['values']['type'];
  $redirect_url .= ' category:' . $form_state['values']['category'];
  $redirect_url .= ' %' . $form_state['values']['keyword'] . '%';

  $form_state['redirect'] = $redirect_url;
}