Drupal 7 Views上下文过滤器标题覆盖

时间:2012-04-19 12:10:29

标签: drupal-7 drupal-views

我有一个通过搜索API返回搜索结果的视图。它充分执行这个用例,我很高兴。为了加盖可交付成果,我需要添加一个Showing search results for '%1'形式的标题覆盖,它最初看起来很容易,但它并没有完全按计划运行。

对于网址= mysite.com/search/all?search=wombat,其中搜索值是从块中的公开表单收集的,我要么:

  

显示'搜索'所有“'

的搜索结果

或者,如果我在标题覆盖中输入%1未出现在网址中的主题,我会得到:

  

显示%1的搜索结果。我的目标是“显示'wombat'的搜索结果

标题覆盖的作用是删除Search for ...部分,但是替换选择“all”作为异常值(或我设置为异常值的任何其他内容)我需要能够获取查询字符串的值(search = wombat)。

有人能在这里说清楚吗?

2 个答案:

答案 0 :(得分:1)

问题是你可以用来覆盖标题的'%1'和'%2'引用你的路径的第一个和第二个参数(用Drupal术语),那就是'search'和'all?search = wombat'在你的情况下......

你需要的是'wombat'作为路径组件本身。

也许你可以通过处理你正在讨论的案例来实现这一点:“主题没有出现在URL中的标题覆盖”的情况。在上下文过滤器部分(我假设您正在工作的地方)中有一个选项,提供默认值当一个不存在时。也许你可以在那里使用' PHP代码'选项,隔离你的'wombat'字符串并将其作为默认的上下文过滤器返回,然后你就可以通过'%1'来实现它。

获取URL部分的php代码应如下所示:

return htmlentities($_GET['search']);

$ _GET()返回url中该变量的值,而htmlentities()只是为了保证它的安全,因为它使用了一部分易受XSS攻击的url。

看看那个组合(1)在一个不存在时设置默认参数和2)在标题打印输出中使用新设置的参数)是否有效!

答案 1 :(得分:0)

我解决了这个问题。 使用以下两个钩子,我们可以以编程方式更改过滤器的默认值。

<?php
/**
* hook_views_pre_view
* @param type $view
* @param type $display_id
* @param type $args
*/
function MODULE_NAME_views_pre_view(&$view, &$display_id, &$args) {
  if ($view->name == 'VIEW_NAME') {
    $filters = $view->display_handler->get_option('filters');   
    $view->display_handler->override_option('filters', $filters);
  }
}



/**
* hook__views_pre_build
* @param type $view
* @return type
*/
function MODULE_NAME_views_pre_build($view) {
  if ($view->name=='VIEW_NAME') {   
    $view->display['page']->handler->handlers['filter']['filter_field']->value['value'] = 8;
    return $view;
  }    
}
?>

这段代码对我有用。我正在使用drupal 7。