Drupal Views:获取与当前节点具有相同分类的节点
Posted
技术标签:
【中文标题】Drupal Views:获取与当前节点具有相同分类的节点【英文标题】:Drupal Views: Get nodes with the same taxonomy as the current node 【发布时间】:2010-10-13 14:56:51 【问题描述】:我有一个带有分类术语的 Content-Type。这是一个选择列表,所以它只能有一个分类法——至少是那个词汇表。现在我需要构建一个视图,列出所有具有相同分类的节点。
认为这不会太难,因为它听起来很基本。但是我无法让它工作。有任何想法吗?我试图避免为此编写模块。
【问题讨论】:
【参考方案1】:虽然如其他一些答案中所述,Views 2 在技术上是可行的,但 Views 3 已内置此集成。
您可以为分类术语 id 创建一个参数,然后选择“提供默认参数”。这将为您提供“来自 URL 的分类术语 ID” 和 “从节点页面加载默认参数...”的选项
这将允许您获取页面的分类并将其作为参数传递给您的视图块。
注意:Views 3 目前处于 Alpha 3 阶段,但根据我的经验,它处于相对稳定的状态,我正在生产站点上使用它。如果它具有您认为有用的上述功能,请使用它,测试它并在遇到任何问题时提交错误/补丁!
【讨论】:
-1:视图 3 不是稳定版本。 Drupal 模块在稳定之前往往会出现很多错误,即使是在测试版中也是如此。这并不是要诋毁视图团队所做的任何事情,但总的来说,使用稳定的软件只是最佳实践。 虽然您认为 Views 3 尚未移至最终版本是正确的,但 Views 3 被列为“受支持”。 Drupal 模块得到测试和从开发通道转移到 alpha 到 beta 再到正式版本的方式是让社区使用它们,测试它们,并报告它们可能遇到的任何问题。只要通过选择 Views 3 而不是 Views 2,Views 项目页面做得很好,我不认为我的回答对问题的回答没有那么有效。 【参考方案2】:此答案适用于 Views 版本 2 或更高版本。首先你需要安装 Views attach (http://drupal.org/project/views_attach)。在继续之前,请阅读附加视图。观看附件最好通过此视频进行解释 http://mustardseedmedia.com/podcast/episode37
现在我们进入视图附加。请在继续之前启用视图附加模块。本质上Views attach
在节点末尾附加了一个视图。在我们的例子中,我们的视图将是具有相同术语的其他文章的列表。
我们基本上需要将节点的分类术语“传递”给视图。将您的词汇名称命名为MyVocab
。
制作视图的步骤。
-
让我们调用视图
display_other_articles_with_same_taxonomy
。
添加Node Content
类型的显示(启用视图附加后可用)。这是一种类似于块和页面显示的显示,但具有将自身附加到节点的特殊能力。
在Node Content Display
中进行如下设置
Node content settings
Node types: [select the content types you are interested in seeing the list of nodes with same taxonomy term]
Build modes: Teaser, Full node
Arguments: token
Show title: No
您应该在参数下选择Use tokens from the node the view is attached to
。让标记为[term-id]
这是“***分类术语的ID”。这个非常重要!!本质上,您将从MyVocab
传递节点的分类术语(请参阅http://groups.drupal.org/node/11788#comment-38332)。如果它的权重最低,那么分类词汇将是节点编辑表单分类部分中的第一个词汇。添加参数Taxonomy: Term Id
。
添加您感兴趣的字段,例如Node: Title
。勾选Link this field to its Node
,确保Node: Title
成为超链接
所以这个视图要做的是:
-
从当前正在查看的节点中的
MyVocab
词汇表中获取分类术语
将其作为参数传递给视图display_other_articles_with_same_taxonomy
列出与正在显示的节点具有相同分类术语的所有节点。
就是这样!
如果您正在使用 Views 3(在撰写本文时当前处于 alpha3)并且您想要一个块(现在文章具有相同的分类术语出现在节点正文的末尾)您可以通过以下方式进行:
-
忘记附加视图...它不是必需的
添加块视图。它应该包含与上述
Node Content
显示说明相同的参数、字段和过滤器。
您需要稍微修改参数Taxononomy: Term Id
的设置:在Action to take if argument is not present:
下选择[x] Provide Default Argument
。选择[x] Taxonomy Term ID from URL
。现在确保 [] Load default argument from term page
未选中,[x] Load default argument from node page, thats good for related taxonomy blocks.
还有 [x]Limit terms by vocabulary
并选择 Series
词汇表。
确保为块命名并将其放在适当的区域中。
注意:此答案是我在How to just show NodeQueue block on included nodes? 提供的答案的子集。在这种情况下,要求是明确选择相关文章并按特定顺序列出。它有点复杂,并且使用了我们在这里根本不需要的节点队列。
【讨论】:
【参考方案3】:使用关系
-
节点 1 -> 关系 1 -> 术语 // 这将是关系->分类法->术语
术语 -> 关系 2 -> 节点 2 // 这将是关系->节点->节点
参数 NID 过滤 NODE 1
关系 2 上的字段或节点完整视图(您将在字段添加表单上看到选择框,以确定要使用的节点)
【讨论】:
这看起来可能是最好的解决方案,但它太简洁了,我无法遵循它。更多细节会有所帮助。【参考方案4】:视图为您提供添加过滤器的选项。单击视图管理 UI 的过滤器区域中的加号,从列表中选择分类,选中术语或 ID,然后填写您需要过滤的值。
编辑(用于明确说明):
首先,在要从您尝试过滤的节点(例如节点标题等)显示的字段部分下添加所需的字段。
在参数下,单击加号并选择分类
检查分类:术语并单击添加
点击更新
在您的预览区域中,通过添加参数并单击预览来测试它。如果它不起作用,您的节点没有附加分类,您的视图模块已损坏,或者您没有按照指示进行操作。
【讨论】:
好吧,我不想为我拥有的每个术语构建一个块。我想过在某处使用参数。 然后添加一个参数 - 视图也可以让您这样做。只需遵循相同的程序。而且您不必构建块 - 它可以放入页面或其他任何内容中。 很明显我试过了,但我不能让它工作。我也尝试过使用关系……你能给出更详细的解释吗?以上是关于Drupal Views:获取与当前节点具有相同分类的节点的主要内容,如果未能解决你的问题,请参考以下文章
Drupal Views 如何在具有相同路径的多个显示器之间做出决定
限制从drupal 7中的`views_get_view_result()`获取的记录数来进行分页