【问题标题】:Create a custom search form drupal创建自定义搜索表单 drupal
【发布时间】:2010-07-30 02:34:12
【问题描述】:

我想在我的 drupal 主题上添加一个自定义搜索选项。这将是一个带有文本框和几个复选框的表单。提交时表单所要做的就是.. 根据复选框状态生成一个搜索 url。

http://localhost/restaurant/search/node/type:restuarant category:34,38 %keyword%

关键字将是搜索框中的文本,并根据复选框状态添加类别。我知道在普通的 php 站点中执行此操作,但不知道如何在我的 drupal 主题中实现此操作。

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

的 url 访问它

http://localhost/restaurant/my_module/form

但我不知道如何将它放在我的模板中的一个块中。

【问题讨论】:

    标签: drupal search forms


    【解决方案1】:

    实现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;
    }
    

    【讨论】:

    • 效果很好!但是你能再告诉我一件事吗?我有复选框。我如何将它们归入类别? $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('南印度'), '18' => t(' Pizza'), ), '#description' => t('拥有管理节点权限的用户将能够覆盖这些选项。'), );
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多