2012-04-19 128 views
1

我有一个视图,通过搜索API返回搜索结果。它充分执行这个用例,我很高兴。为了使可交付成果臻于完美,我需要添加一个形式为Showing search results for '%1'的标题覆盖,它看起来很简单,但它并不完全按计划运行。Drupal 7视图上下文过滤器标题覆盖

对于URL = mysite.com/search/all?search=wombat,其中搜索值从暴露的形式块内聚集,我要么获得:

显示搜索结果“搜索‘全’”

,或者,如果我在标题覆盖输入%1在URL没有出现问题,我得到:

%1" 显示搜索结果我的目标是让“显示‘袋熊’

标题覆盖工程,它消除了Search for ...一部分,但在替代上拿起搜索结果‘所有’作为异常值(或其他任何东西,我将作为异常值)我需要能够获取查询字符串(search = wombat)的值。

任何人都可以在这里发光?

回答

1

问题是可以用来覆盖标题的'%1'和'%2'是指你的路径的第一个和第二个参数(用Drupal的术语),那就是'搜索'和'全部?搜索= Wombat'在你的情况...

你需要的是'袋熊'作为一个路径组件本身。

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

PHP代码来获取URL的这一部分应该是这个样子:

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

的$ _GET()返回URL中的变量的值,和ヶ辆()仅仅是保持安全,因为它使用了一部分URL,这对XSS很脆弱。

看看组合(1)在不存在时设置默认参数,以及2)在标题打印输出中使用新设置的参数)工作!

+0

非常感谢Boriana,这有助于解决方案。仍然无法获取%1,但从查询字符串中获取值的确有窍门。 – 2012-05-04 14:05:49

0

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

<?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.