如何在视图的节点引用上下文过滤器中使用节点标题或路径别名代替节点ID?


7

我有节点A,其中节点对节点B的引用。

在一个视图中,我显示了引用了特定节点B的所有节点A(nid:123,标题:node-B-title)。

我不想使用上下文过滤器中的nid,而是要使用节点标题。例如,代替:

view-name/123

我想用

view-name/node-B-title

我该怎么办?

Answers:


10

我遇到了一个非常相似的问题,不仅找到了解决方案,还学到了有关视图如何工作的新知识。让我也分享我学到的知识以及您的问题的解决方案。

使用一个或多个上下文过滤器创建视图时,该视图必须从某个位置接收这些过滤器的值。这可以通过-

  1. 从URL中选择上下文过滤器值
    • 通常,出于这种目的,您将拥有一个页面视图,该页面视图具有表单的URL foo/%/barfoo/bar/%单个上下文过滤器或表单的URL foo/%/bar/%foo/bar/%/%多个过滤器
    • 如果您有多个过滤器,则第一个出现的url值将映射到第一个过滤器,第二个过滤器旁边,依此类推。
  2. 视图允许您告诉您URL没有可用的过滤器值该怎么办。通常用于块视图
    • 您可以从不同的操作中选择,然后再配置选择。 您可以从不同的操作中选择,然后再配置选择。 asdfj kajsdf
  3. 另一件事情的看法,您可以是告诉做什么用的过滤器值,如果它们在URL中发现如上#1描述。典型的用例是-根据过滤器值制作动态标题,验证过滤器值等。
    • 验证过滤器值时,您也可以更改值!(这就是我们的解决方案所在的地方)。这非常类似于我们可以在drupal表单验证回调中更改$ form值的方式。 在此处输入图片说明

解决您特定问题的方法是,在上图中箭头所指的部分中使用非常相似的代码。

事实证明,该链接对我有很大帮助。以下是摘录:

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

这对我不起作用,但是在保存时在视图中造成了ajax错误。
DrCord

1

这并非在所有情况下都可行,但是解决问题的一种方法是使用节点B(或节点类型B)的实际节点显示,并使用path或pathauto模块设置其所需的路径。然后使用views块添加内容关系和所需的视图。

在NID上使用上下文过滤器,然后设置Provide default value > Content ID from URL。然后将views块添加到您的页面或页面集。

如果上下文允许您在节点本身而不是视图页面上使用视图块,则这将使获取所需路径和显示所需视图变得更加容易。


1

我编辑了接受的答案,但想在此处添加实际代码:

在上下文过滤器的验证选项下使用PHP经过验证的选项。

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

1

视图参数必须是内容类型的字段引用,然后选择选项“提供默认参数”并检查选项ID节点(类似)。

1)添加参数“ X字段引用” 2)从URL检查ID节点(添加默认参数)3)在验证部分中,检查节点的内容类型,并在“节点类型”部分选择“节点ID”

并完成。:)


“来自URL的内容ID”仅给出图片。如果我要使用术语引用,则可以使用“验证条件”和“将术语名称转换为术语ID”。对于节点引用,没有类似的选项将标题翻译为nid。可能是因为标题不一定是唯一的。
uwe 2012年

是是正确的,但必须将参数设为字段引用(nid),请尝试这样做。
Eleo 2012年

1)添加参数“ X字段引用” 2)从URL检查ID节点(添加默认参数)3)在验证部分中,检查节点的内容类型,并在“节点类型”部分选择“节点ID”
Eleo

实际的URL可以带有nid,而路径别名可以是节点标题。这行得通吗?
SGhosh

0

旧问题,但通过Google找到了,并想与以后找到它的任何人分享我的解决方案:

现在有一个名为safeword的模块 ,该模块基本上可以完成Sumeet Pareek建议的功能:(自动)创建一个URL友好字段。


0

我建议使用扩展路径别名(path_alias_xt)模块。它纯粹是通过不配置安装来解决此问题的,显然,这基本上是魔术。:D并非如此,但是模块页面的摘录说明了您如何安装它,并修复了此问题和其他问题,但是并没有涉及模块在幕后的工作方式。。。嗯,我们可以总是阅读代码:D它没有特别提到修复视图路径,但是我已经使用它来做到这一点,并且效果很好。

从模块页面可以解决的问题列表:

  • 您是否曾经想过,为什么在为节点/ 123定义诸如about-us之类的别名之后,您的页面仍然充满那些难看的机器生成的选项卡和链接,如/ node / 123 / edit,node / 123 / revisions等。 。?
  • 对于/ taxonomy / term /%和/ user /%链接也是如此:您是否希望看到/ dries / track但获得了/ user / 5 / track?
  • 您是否发现浏览器地址栏也显示了这些丑陋的数字而不是您的别名?
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.