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

时间:2014-10-08 04:39:19

标签: drupal-7 views

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

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

我一直试图通过URL显示某个父母的所有笔记(我有pathauto和alias'设置):

committees/parent/notes

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

我设置如下:

当过滤器值不在URL中时:

已选中提供默认值

键入:来自URL的原始值(URL是委员会/父/备注)

路径组件:2(父)

已选中 - 使用路径别名

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

已选中 - 指定验证标准

已选择 - 验证程序:PHP代码

PHP验证码:**

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

然而使用Contextual过滤器(从field_parent引用的内容实体)内容:Nid然后放入父节点id(在本例中为fire),我能够看到某个父节点的“fire”注释id(与fire只是nid相同)。这正是我想要的。

我在这里缺少什么,以便在URL中引用父级并显示基于该父级的注释?为什么NID工作而不是URL中的PARENT?

2 个答案:

答案 0 :(得分:0)

引用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]; 

答案 1 :(得分:0)

尝试使用此代码

  

当URL中的过滤值为IS或默认提供时:

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

检查this