logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动

Views 上下文过滤器与关系 —— 参数与关联

15/10/2025, by Ivan

在本课中,我将重点讲解 Views 中的参数(arguments)使用。参数是 URL 的一部分,例如:

node/15
第一个参数是 node,第二个是 15。
taxonomy/term/10
第一个参数是 taxonomy,第二个是 term,第三个是 10。
user/67
第一个参数是 user,第二个是 67。

我想这些例子已经非常直观,不需要额外说明。

可以使用函数 arg() 来获取参数:

<?php
print arg(0) . '<br />';
print arg(1);
?>

如果 URL 是 node/15,输出结果将是:

node
15

在函数 arg 中,参数编号从 0 开始。现在我们来看看在 Views 模块中有哪些现成的实现方式。

显示用户的节点

假设我们在页面 user/1 上,需要显示该用户(uid = 1)发布的节点列表。为此,我们将使用 URL 中的参数。

创建一个新的视图(View)。输出类型选择“块(Block)”,在字段中添加节点标题,只显示已发布的节点,并按发布日期降序排序。

 

标题:
user_nodes
格式:
未格式化列表(Unformatted list) | 设置
显示:字段(Fields) | 设置
字段(Fields):
内容:标题
筛选条件(Filter criteria):
内容:已发布(是)
排序条件(Sort criteria):
内容:发布日期(降序)
分页器(Pager):
使用分页器:显示指定数量的项目 | 15 项
更多链接:无

接着点击“添加上下文过滤器(Contextual filters,参数)”,选择:
内容: 作者 uid(Author uid)

然后选择:

当过滤值不可用时:
  提供默认值(Provide default value)
    从 URL 获取用户 ID(User ID from URL)

Views contextual filters

保存视图,将块添加到需要的区域,然后访问 user/1 页面,在我们创建的块中会显示该用户(uid = 1)的所有节点。

显示关联的节点

现在我们来看一个更复杂的例子。假设我们需要将若干节点关联到另一节点。这可以通过 node reference 字段来实现。要使用这些关联字段,我们需要安装 References 模块及其子模块 Node References

http://drupal.org/project/references

在 Drupal 7 中,引用字段允许将多个用户或多个节点关联到一个节点。这是通过 node reference 字段实现的。由于 Drupal 7 允许为任何实体添加字段,因此现在可以关联任意实体。

例如,我的网站上有 4 条新闻,我想将第二条新闻与第一条和第三条新闻关联(假设它们主题相似)。

进入“新闻”内容类型的字段管理界面,添加一个带自动完成的 node reference 字段。我将该字段命名为“相似新闻”。然后选择哪些内容类型可以被关联到该节点,并设置该字段可选择的节点数量。我只选择了“新闻”。点击保存字段。接着编辑第二条新闻,在其中会看到“相似新闻”字段。

Drupal reference field

此时,新闻节点之间的关联会在页面上以列表形式显示。但我们的任务是通过 Views 进行输出设置。
创建一个新的视图(View),输出类型同样选择块(Block)。

标题:
similar_news
格式:
未格式化列表(Unformatted list) | 设置
显示:字段(Fields) | 设置
字段:
内容:标题
筛选条件:
内容:已发布(是)
内容:类型(= 新闻)
排序条件:
内容:发布日期(降序)
分页器:
使用分页器:显示指定数量的项目 | 5 项

添加上下文过滤器(Contextual filter)“内容:Nid”,这次选择:

当过滤值不可用时:
  提供默认值(Provide default value)
    从 URL 获取内容 ID(Content ID from URL)

然后在“关系(Relationships)”中添加新的关系:
内容: 相似新闻(field_similar)。(如果你的字段名称不同,请选择对应字段。)请注意,还有一个带“reverse”标记的同名字段,这表示反向关系。也就是说,如果我们在“新闻 3”页面上,则会在块中显示“新闻 2”(即使我们最初是在“新闻 2”中选择了与“新闻 1”和“新闻 3”的关联)。

最终会选择以下字段:

Contextual filters:
内容:Nid
Relationships:
内容:相似新闻

然后在“字段(Fields)”设置中,将“使用关系”选项从“Do not use a relationship”更改为我们的关系名称。
字段:
(field_similar) 内容:标题

保存视图并将块放入所需区域。

现在,在“新闻 2”页面上,将会在一个独立的块中显示相似新闻“新闻 1”和“新闻 3”。