我有一个通过搜索API返回搜索结果的视图。它充分执行这个用例,我很高兴。为了加盖可交付成果,我需要添加一个Showing search results for '%1'
形式的标题覆盖,它最初看起来很容易,但它并没有完全按计划运行。
对于网址= mysite.com/search/all?search=wombat
,其中搜索值是从块中的公开表单收集的,我要么:
显示'搜索'所有“'
的搜索结果
或者,如果我在标题覆盖中输入%1
未出现在网址中的主题,我会得到:
显示%1的搜索结果。我的目标是“显示'wombat'的搜索结果
标题覆盖的作用是删除Search for ...
部分,但是替换选择“all”作为异常值(或我设置为异常值的任何其他内容)我需要能够获取查询字符串的值(search = wombat)。
有人能在这里说清楚吗?
答案 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。