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

Drupal 7 Drupal 7视图上下文过滤器标题覆盖,drupal-7,drupal-views,Drupal 7,Drupal Views,我有一个通过搜索API返回搜索结果的视图。它充分执行了这个用例,我很高兴。要为可交付成果加冕,我需要添加表单的标题覆盖,该表单显示“%1”的搜索结果,该表单一开始看起来很简单,但没有完全按照计划工作 对于URL=mysite.com/search/all?search=wombat,其中搜索值是从块中的公开表单收集的,我得到: 显示“搜索全部”的搜索结果 或者,如果我在URL中未出现的主题的标题覆盖中输入%1,我会得到: 显示%1的搜索结果。我的目标是获得“显示“袋熊”的搜索结果” 标题覆盖的工

我有一个通过搜索API返回搜索结果的视图。它充分执行了这个用例,我很高兴。要为可交付成果加冕,我需要添加表单
的标题覆盖,该表单显示“%1”的搜索结果
,该表单一开始看起来很简单,但没有完全按照计划工作

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

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

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

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

标题覆盖的工作原理是,它删除了
搜索…
部分,但替换选择“all”作为异常值(或我设置为异常值的任何其他内容),其中我需要能够选择查询字符串的值(Search=wombat)


有人能解释一下吗?

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

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

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

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

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


看看这个组合(1)在没有参数时设置默认参数,2)在标题打印输出中使用新设置的参数)是否有效

问题在于,可用于覆盖标题的“%1”和“%2”引用了路径的第一个和第二个参数(用Drupal术语),在您的情况下,这将是“search”和“all?search=wombat”

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

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

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

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

看看这个组合(1)在没有参数时设置默认参数,2)在标题打印输出中使用新设置的参数)是否有效

我解决了这个问题。 使用以下两个钩子,我们可以通过编程方式更改filter的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。

我解决了这个问题。 使用以下两个钩子,我们可以通过编程方式更改filter的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。

非常感谢Boriana,这有助于解决问题。仍然无法获取%1,但从查询字符串获取值成功。非常感谢Boriana,这有助于找到解决方案。仍然无法获取%1,但从查询字符串获取值就成功了。