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

Posted

技术标签:

【中文标题】Drupal 6 Views:通过复选框打开/关闭过滤器?【英文标题】:Drupal 6 Views: Toggling filters on/off via checkbox? 【发布时间】:2012-04-29 20:45:10 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案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);
  


?>

【讨论】:

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

以上是关于Drupal 6 Views:通过复选框打开/关闭过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 6:views_get_view_result

将 Drupal 视图过滤器公开为开/关复选框以启用/禁用过滤器

Drupal Views Ajax 刷新行

Drupal 6 视图 2:PHP 片段

2 寻呼机在视图中 - Drupal 6

PHP Drupal 6 Views2嵌入