1

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

我目前有一个视图设置有两个显示:一个只过滤节点标题,另一个使用Views Or将结果限制在节点标题或节点正文中具有关键字的节点。就其本身而言,这两种显示器都按照我想要的方式工作。

我的问题是我将如何使用复选框或类似的东西在这两个显示器之间切换。我不想使用视图显示选项卡,因为两个显示看起来在视觉上相同(唯一的区别是过滤器如何配置为包含更多/更少的结果),这会让用户感到困惑 - 加上它使用 AJAX 会破坏一些(主要是小)我通过 jQuery 对视图的行为进行的修改。

本质上,我想要完成的是在提交视图时进行条件检查 - 取决于是否选中了复选框,参数是否发送到一个显示器或另一个显示器。关于如何做到这一点的任何建议?

4

1 回答 1

1

您可能能够解决此问题的一种方法可能涉及在公开的过滤器表单上添加自定义验证处理程序,这在理论上允许您检查值并将请求转发到适当的不同页面显示。公开的过滤器在 URL 中作为 $_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);
  }
}

?>
于 2012-04-29T23:59:05.677 回答