1

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

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

显示“搜索“全部””的搜索结果

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

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

标题覆盖的工作原理是它删除了Search for ...部分,但替换选择“全部”作为异常值(或我设置为异常值的任何其他值),我需要能够获取查询字符串的值(搜索=袋熊)。

任何人都可以在这里阐明一下吗?

4

2 回答 2

1

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

相反,您需要的是“袋熊”本身作为路径组件。

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

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

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

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

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

于 2012-04-20T20:11:14.800 回答
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。

于 2013-08-05T11:14:16.547 回答