路径别名与内容 ID 的上下文过滤器问题

Posted

技术标签:

【中文标题】路径别名与内容 ID 的上下文过滤器问题【英文标题】:Contextual Filter Issues with Path Alias vs Content ID 【发布时间】:2014-10-08 04:39:18 【问题描述】:

我有一个简单的内容类型,每个内容类型都有一个“父”字段。此父字段由每个其他关联内容类型中的实体引用显示。如果存在父内容类型,那么您可以将这些其他内容类型与其关联。

例如,使用视图,我的页面显示了“注释”的所有结果。 Notes 有一个与之关联的父级,在您创建新便笺时必须选择该父级。所以每个音符都有一个父级。

我一直试图通过这样的 URL 显示某个父级的所有注释(我有 pathauto 和 alias' 设置):

committees/parent/notes

使用上下文过滤器和实体引用(父)我试图根据父上下文显示这些注释。我有以下关系:实体参考:父和上下文过滤器(从 field_parent 引用的内容实体)内容:父。当我在自动预览区域中预览时,什么都没有显示。例如,父名称是“fire”,我在预览上下文过滤器中输入它,但没有显示任何内容。

我是这样设置的:

当过滤器值不在 URL 中时:

勾选提供默认值

类型:来自 URL 的原始值(URL 是委员会/父级/注释)

路径组件:2(父)

选中 - 使用路径别名

当过滤器值在 URL 中或默认提供时:

选中 - 指定验证条件

已选择 - 验证器:php 代码

PHP 验证码:**

$handler->argument = str_replace("-"," ",$argument);
return true;

但是使用上下文过滤器(从 field_parent 引用的内容实体)内容:Nid 然后放入父节点的节点 ID(在这种情况下为火),我可以看到某个父节点的“火”注释id (这与 fire 只是 nid 相同)。这正是我想要的。

对于要在 URL 中引用的父级并显示基于该父级的注释,我在这里缺少什么?为什么在 URL 中找到 NID 而不是 PARENT?

【问题讨论】:

Here 被讨论过并为我工作。 【参考方案1】:

当引用drupal 7 时使用nid 作为引用。在您的情况下,您应该在 url 中使用 nid 或从父别名中查找 nid。 对于后者,您可以使用 drupal_get_normal_path() 函数返回节点/nid 路径,然后在 php 过滤器中提取 nid,如

$normalpath = drupal_get_normal_path($alias)
$parts=explode('/', $normalpath );          
$nid=$parts[1]; 

【讨论】:

感谢您的回复。因此,使用 Content NID 引用父级作为上下文过滤器并提供默认类型:来自 URL 的内容 ID?然后将以上内容添加到 Validation Criteria 区域?返回真;最后? 我认为您应该使用“当过滤器值不在 URL 中时”、“提供默认值”、“类型:PHP 代码”,然后使用上面的代码从 URL 中获取 nid并将其返回到视图中。 它返回 NID 结果很好,类似于如果我使用来自 URL 的内容 ID,但是,如果我使用别名,它不会返回结果。 您的意思是,如果您键入委员会/someparentnid/notes,它会返回正确的结果,而委员会/someparentalias/notes 则不起作用? 对...没有别名的结果【参考方案2】:

试试这个代码

当过滤值在 URL 中或默认提供时:

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) 
 $handler->argument = $np[1];
 return TRUE;
 else 
 return FALSE;

检查this!

【讨论】:

以上是关于路径别名与内容 ID 的上下文过滤器问题的主要内容,如果未能解决你的问题,请参考以下文章

将视图上下文过滤器设置为 request_path()

具有默认值上下文过滤器的 Drupal 7 视图块不会在页面上过滤(Mongo)

如果未定义第二个过滤器,则具有 2 个上下文过滤器的 Drupal 7 视图不起作用

如何在没有面板的Views Drupal 7中将组ID作为上下文

Drupal 7 视图 - 如何将上下文过滤器与常规过滤器(使用 OR)结合起来?

如何在 java 中为 Servlet 上下文添加别名?