我有一个视图,我正在使用它作为“高级搜索”工具 - 它只是提供了一个相关节点的列表,这些节点受到我所拥有的许多暴露过滤器的限制。特别是,我有一个“关键字”暴露过滤器,它充当主搜索框,过滤节点标题。现在,我有一个请求能够切换(我假设有一个复选框或类似的)此过滤器同时搜索节点标题和正文,作为提供的选项拥有更多搜索结果的用户。
我目前有一个设置有两个显示的视图:一个仅过滤节点标题,另一个使用Views Or将结果限制为在节点标题或节点中具有关键字的节点身体。这两个显示器本身都按照我喜欢的方式工作。
我的问题是如何使用复选框或类似方法在这两个显示之间切换。我不想使用Views Display Tabs,因为两个显示看起来在视觉上完全相同(唯一的区别是过滤器如何配置为包含更多/更少的结果),这会让用户感到困惑 - 而且它使用AJAX打破了一些(通常是小的)修改我通过jQuery对视图的行为进行了修改。
实际上,我想要完成的是在提交视图时的条件检查 - 取决于是否选中了复选框,参数被发送到一个显示器或另一个显示器。有关如何实现这一目标的任何建议吗?
答案 0 :(得分: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);
}
}
?>