路径别名与内容 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 的上下文过滤器问题的主要内容,如果未能解决你的问题,请参考以下文章
具有默认值上下文过滤器的 Drupal 7 视图块不会在页面上过滤(Mongo)
如果未定义第二个过滤器,则具有 2 个上下文过滤器的 Drupal 7 视图不起作用
如何在没有面板的Views Drupal 7中将组ID作为上下文