Drupal 6视图:通过复选框打开/关闭过滤器?

Drupal 6视图:通过复选框打开/关闭过滤器?,drupal,drupal-6,drupal-views,drupal-exposed-filter,Drupal,Drupal 6,Drupal Views,Drupal Exposed Filter,我有一个视图是作为“高级搜索”工具使用的——它只是提供了一个相关节点的列表,这些节点受到我现有的一些公开过滤器的限制。特别是,我有一个“关键字”公开过滤器,它充当主搜索框,过滤节点标题。现在,我请求能够切换(我假设使用复选框或类似选项)此过滤器,以同时搜索节点标题和正文,作为向用户提供更多搜索结果的选项 我目前有一个视图设置为两个显示:一个仅过滤节点标题,另一个用于将结果限制为节点标题或节点正文中包含关键字的节点。就其本身而言,这两种显示器的工作方式都符合我的要求 我的问题是如何使用复选框或类似

我有一个视图是作为“高级搜索”工具使用的——它只是提供了一个相关节点的列表,这些节点受到我现有的一些公开过滤器的限制。特别是,我有一个“关键字”公开过滤器,它充当主搜索框,过滤节点标题。现在,我请求能够切换(我假设使用复选框或类似选项)此过滤器,以同时搜索节点标题正文,作为向用户提供更多搜索结果的选项

我目前有一个视图设置为两个显示:一个仅过滤节点标题,另一个用于将结果限制为节点标题或节点正文中包含关键字的节点。就其本身而言,这两种显示器的工作方式都符合我的要求

我的问题是如何使用复选框或类似的东西在这两个显示之间切换。我不想使用,因为两个显示在视觉上看起来完全相同(唯一的区别是过滤器如何配置以包含更多/更少的结果),这会让用户感到困惑——另外,它使用AJAX打破了我通过jQuery对视图行为所做的一些(大部分是小的)修改


本质上,我想完成的是提交视图时的条件检查——取决于是否选中复选框,参数将发送到一个显示器或另一个显示器。关于如何完成此操作的任何建议?

一种方法是在公开的筛选表单上添加自定义验证处理程序,理论上允许您检查值并将请求转发到不同的页面显示。公开的过滤器在URL中作为$\u GET变量公开,因此,使用预定义的过滤器将用户转发到特定页面应该很容易

<?php

function mymodule_form_alter(&$form, $form_state, $form_id) {
  switch ($form_id) {
    case 'views_exposed_form':
      // Deterimine the ID so you only do this
      // to a specific exposed filter form
      // drupal_set_message($form['#id']);
      if ($form['#id'] == 'views-exposed-form-api-search-page-1') {
        // You might also want to add the checkbox FAPI item in this area
        $form['#validate'][] = 'mymodule_api_search_validate'; // custom validate handler function name
      }
    break;
  }
}

function mymodule_api_search_validate($form, &$form_state) {
  // Check if the FAPI item has the specified checkbox value
  if ($form_state['values']['options'] == 'title') {
    // The get variables to pass to the views exposed filters
    // You can configure what this $_GET variable should be while editing the filter
    $query = array(
      'query' => 'the search query',
    );
    drupal_goto('api/search', $query);
  }
}

?>

一种方法是在公开的筛选表单上添加一个自定义验证处理程序,理论上允许您检查值并将请求转发到不同的页面显示。公开的过滤器在URL中作为$\u GET变量公开,因此,使用预定义的过滤器将用户转发到特定页面应该很容易

<?php

function mymodule_form_alter(&$form, $form_state, $form_id) {
  switch ($form_id) {
    case 'views_exposed_form':
      // Deterimine the ID so you only do this
      // to a specific exposed filter form
      // drupal_set_message($form['#id']);
      if ($form['#id'] == 'views-exposed-form-api-search-page-1') {
        // You might also want to add the checkbox FAPI item in this area
        $form['#validate'][] = 'mymodule_api_search_validate'; // custom validate handler function name
      }
    break;
  }
}

function mymodule_api_search_validate($form, &$form_state) {
  // Check if the FAPI item has the specified checkbox value
  if ($form_state['values']['options'] == 'title') {
    // The get variables to pass to the views exposed filters
    // You can configure what this $_GET variable should be while editing the filter
    $query = array(
      'query' => 'the search query',
    );
    drupal_goto('api/search', $query);
  }
}

?>


好主意,最好将过滤器作为块公开,然后控制可见性,使其显示在两个不同的视图结果中并可递归使用。好主意,最好将过滤器作为块公开,然后控制可见性,使其显示在两个不同的视图结果中并可递归使用。