Views上下文过滤器如何工作?


9

我正在尝试再次围绕上下文过滤器展开讨论!我曾经用过它,但是我又完全陷入了困境。这是我想做的事情:

  1. 生成带有分类术语插入到此克隆页面中的克隆内容节点页面。

例如:EXAMPLE.com/white-shoes/blue

当用户到达/ white-shoes页面时,它将显示面向白色的原始节点页面。现在,如果用户落在/ white-shoes / blue上,它将显示相同的节点页面,但是这次将重写所有正文内容,将白色替换为蓝色。

在“ 视图”中,我必须创建一个页面显示,其路径为:%/%

现在,我将创建一个上下文过滤器来检索nid。我添加Content:nid作为上下文过滤器。我选择提供默认值,然后输入以下PHP代码:

$ x = drupal_lookup_path('源',arg(0));

$ y = explode('/',$ x);

返回$ y 1 ;

该PHP代码基本上将URL的/ white-shoes部分转换为NID。但它不起作用。我通过终端通过drush ev测试了代码,确实得到了返回的结果,所以我知道它可以工作。

我对分类术语名称进行了相同的操作,并为此添加了上下文过滤器。这次,我选择“ 提供默认值”并选择“ 来自URL的原始值”,然后选择第二个参数。

在此处输入图片说明

如您所见,当我为上下文过滤器输入预览值:AAA / BBB / CCC时。我的默认值被忽略。它本来应该抓住第二个参数,但是只有第一个。查看SQL语句WHERE,当它应该是BBB时,它将得到AAA。

在此处输入图片说明

所以问题是我在做错什么,还是对我想要完成的事情有更好的解决方案?


这听起来很愚蠢,但是您能提供更多细节吗?我有一点时间了解您正在尝试什么,更多地了解您如何尝试做到这一点。不要使用原始值或提供默认值,而应使用URL中的Content ID。这将提供NID。
kyletaylored

嗨,kyle,自您登陆url以来没有Content ID:/ white-shoes / blue...。/ blue url不存在,因为它是通过视图呈现的。因此没有内容ID可抓取...它必须解析url的第一个参数,然后将该URL转换为NID路径。
Patoshiパトシ

Answers:



5

上下文过滤器用于通过URL参数过滤视图的输出,您也可以通过以下格式手动传递参数:

<?php print views_embed_view($name,$display_id,$arg1,$arg2,$arg3); ?>

其中“ $ name”是视图的名称(例如,“ example_view”),“ $ display_id”是视图的显示类型(例如,“ default”),而“ $ arg1,$ arg2,$ arg3”是参数就像在URL中一样。

URL参数具有以下结构:

http://example.com/arg_1/arg_2/arg_3(arg_2具有路径组件2(在视图设置页面中))。

当过滤器值不可用时:

这意味着drupal找不到任何过滤器。

提供默认值:

当过滤器值不可用时,您可以使用此选项为视图输出创建过滤器,该过滤器可以是PHP代码(如果启用了PHP过滤器模块),也可以从URL参数中获取其值->(原始值从网址)。例外文本框可让您作弊值并显示所有结果。

过滤器值可用时

在这种情况下,当drupal可以找到过滤器值时,您将根据需要和其他一些选项进行验证。


给定views_embed_view()函数。我如何将其加载到/ white-shoes / blue的子路径中?请记住,/ blue不存在,因为它是视图生成的。当用户到达/ blue路径时,它应该解析第一个参数并获取该别名的NID,然后加载其内容。上下文过滤器的问题在于,当过滤器值可用时,无法提供PHP值。
Patoshiパトシ

@duckx,当过滤器可用时,有一个出色的选项可提供PHP值- VALIDATION (type: PHP Code)。使用此选项,您可以使用视图对象并执行所需的所有操作。在您的情况下/blue,视图生成的路径也将用于获取该别名的节点ID。
Jack-PL
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.