2014-10-08 37 views
0

我有一个简单的内容类型,每个内容类型都有一个“父”字段。该父字段由每个其他关联内容类型中的实体引用显示。如果存在父级内容类型,则可以将这些其他内容类型与它关联。路径别名与内容ID的上下文过滤器问题

使用视图,我有页面显示“笔记”的所有结果,例如。 Notes创建新笔记时,必须选择笔记与其关联的父项。所以每个音符都有一个父母。

我一直在试图通过像这样的URL表现出一定的父的所有音符(我有pathauto和别名设置):

committees/parent/notes 

使用上下文过滤器和实体引用(父)我试图根据父上下文显示这些笔记。我有以下关系:实体引用:父和上下文过滤器(从field_parent引用的内容实体)内容:父。当我在自动预览区域中预览时,没有任何显示。例如,父级名称是“fire”,我将其输入到预览上下文过滤器中,不显示任何内容。

我有它设置像这样:

当过滤器值在URL不是:

经过提供默认值

类型:从URL原始值(网址为委员会/父/笔记)

路径组件:2(父)

经过 - 使用路径别名

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

经过 - 指定验证标准

选择 - 验证:PHP代码

PHP验证码:**

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

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

我在这里丢失了什么,父母在URL中被引用并显示基于该父代的备注?为什么NID工作,而不是在URL中找到的父母?

+0

[Here](http://drupal.stackexchange.com/questions/46031/how-to-use-node-title-or-path-alias-instead-of-node-id-in-node-reference -context)被讨论并为我工作。 – 2016-07-25 11:13:32

回答

0

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

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

感谢您的回复。因此,使用Content NID引用父级作为上下文过滤器并提供默认类型:来自URL的内容ID?然后将上述添加到验证标准区域?返回TRUE;最后? – jasonflaherty 2014-10-08 20:00:00

+0

我认为你应该使用“当过滤器值不在URL中”,“提供默认值”,“类型:PHP代码”,然后使用上面的代码从URL获取nid并将其返回给视图。 – geoandri 2014-10-08 20:15:42

+0

它返回的NID结果很好,类似于我使用URL中的Content ID,但是,如果我使用别名,它不会返回结果。 – jasonflaherty 2014-10-08 20:19:11

0

与此代码尝试使用

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

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

检查this