2012-04-29 47 views
1

我有一个视图,我用它作为“高级搜索”工具 - 它只是提供了一些相关节点的列表,这些节点受到我所使用的大量暴露过滤器的限制。特别是,我有一个“关键字”暴露过滤器,它充当主要搜索框,它在节点标题上过滤。现在,我已经要求能够切换(我假设带有复选框或类似的)此过滤器,以同时搜索节点标题正文,作为向用户提供更多搜索结果的选项。Drupal 6查看:通过复选框打开/关闭过滤器?

我目前有一个视图设置了两个显示器:一个仅对节点标题进行过滤,另一个使用Views Or将结果限制为包含节点标题或节点主体中的关键字的节点。通过他们自己,这两个显示器都按照我喜欢的方式工作。

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

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

回答

1

您可能会想到的一种方法可能涉及在公开的过滤器表单上添加自定义验证处理程序,理论上允许您检查该值并将请求转发到适当的不同页面显示。暴露的过滤器作为$ _GET变量显示在URL中,因此,将用户转发到具有预定义过滤器的特定页面应该很容易。

<?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); 
    } 
} 

?> 
+0

不是一个好主意,它会是好的,以露出过滤器作为一个块,则控制的可见性,使其显示在两个不同视图的结果,并且可以递归地被使用。 –