在 Drupal 7/Views 3 中创建相似节点列表

Posted

技术标签:

【中文标题】在 Drupal 7/Views 3 中创建相似节点列表【英文标题】:Creating list of similar nodes in Drupal 7/Views 3 【发布时间】:2012-05-14 07:59:54 【问题描述】:

从 drupal.stackexchange.com 复制,希望在这里获得更多答案:

我面临一个相当常见的问题,即显示与当前节点相似的节点列表。相似节点定义为具有当前节点具有的至少一个分类术语的节点。作为模块可用的解决方案很少,但是我发现的模块(特别是按术语相似)处于 Drupal 7 的 beta 阶段(如“无法正常工作”)。

我还发现了一些基于视图和上下文过滤器(例如http://scito.ch/content/show-related-nodes-block-based-taxonomy-terms-views-3-and-drupal-7)或关系的解决方案。我非常喜欢这种方式,因为它节省了我安装额外模块的时间,并且视图正在积极开发和支持,我更喜欢使用它们而不是任何自定义解决方案。我无法解决的问题是如何按它们共享的术语数量对“相似节点”进行排序。例如,如果我的“IPhone 4S”节点包含术语“Gadget”、“Apple”和“Phone”,我希望类似节点按以下顺序排列:

    iPhone 3(苹果、小工具、电话) iPad(苹果、小工具、平板电脑) Mac(苹果、电脑) 布拉姆利(苹果、水果、树)

如何在此视图中按共享术语的数量对节点进行排序?

这个问题是关于构建视图的,请不要建议基于模块或自定义 php 的解决方案。谢谢。

【问题讨论】:

所有分类术语是否都在同一个词汇中? 网站上有几个分类词汇,但为了相似性,只使用其中一个。 【参考方案1】:
    创建块视图 添加上下文过滤器 -> 内容:Nid -> 提供默认值 -> 来自 URL 的内容 ID 添加关系 -> 内容:节点上的分类术语 -> 指定适当的词汇表 添加关系 -> 分类术语:使用上述词汇的内容 -> 勾选需要此关系 打开视图聚合(注意:下面屏幕截图中的箭头指向错误的位置,应该指向它所在位置下方的 2 行) 假设您仅列出标题,请编辑标题字段以使用您在上面 #4 中设置的关系。 添加新的内容排序标准:Nid。在聚合设置中,选择计数。使用 #4 中的关系并降序排序 添加上下文过滤器 -> 内容:Nid -> 使用 #4 中的关系 -> 提供默认值 - 来自 URL 的内容 ID -> 向下滚动并展开“更多”,然后选中“排除”以从视图中删除当前节点

** 请参阅下面@garret-albright 的评论,以在 Views UI 预览中对此进行测试。 **

【讨论】:

感谢您的模范回答!排除节点本身只是另一个简单的步骤。您能否编辑您的答案以包括以下内容:7. ... +使用#4中的关系并按降序排序+ +8。添加上下文过滤器 -> 内容:Nid -> 使用来自 #4 的关系 -> 提供默认值 - 来自 URL 的内容 ID -> 向下滚动并展开“更多”,然后选中“排除”以从视图中删除当前节点,因此本教程是完成,赏金就是你的了! 无法将#4 中的关系应用到标题字段。没有这样的选择!可能此方法不适用于 Views 3.7 @Heihachi 我刚刚使用最新版本的 Views 对此进行了测试,目前它正在为我工​​作。 您,先生,为我节省了数小时的头痛时间。 (虽然你图片上的 5 指向了错误的位置——让我困惑了一分钟)。 @nmc 好的,我想通了——由于某种原因,如果我给它一个像“123”这样的单个 NID 参数,Views UI 预览将无法工作——单步调试我的调试器,它似乎没有设置第一个关系之后的参数使用它,然后当第二个关系没有参数可以使用时失败。将 Views UI 参数字段中的参数加倍 - “123/123”给了我预期的行为,就像将块放在节点页面上一样。一切都很好。【参考方案2】:

你猜怎么着 - 也有 modules :D

我可以推荐 similar by terms 为您提供该视图而无需配置麻烦。

【讨论】:

【参考方案3】:

当您配置像这样的复杂视图时,有一些配置提示可以帮助您了解每个步骤的实际情况:

在结构>>视图>>设置>>基本:

选中“显示高级帮助警告”(重要:需要安装高级帮助模块) 选中“根据更改自动更新预览” 选中“在实时预览期间显示有关视图的信息和统计信息” 选中“显示 SQL 查询” 最后,保存配置

现在您可以预览每个配置步骤的结果、关联的 SQL 查询以及涉及的字段和表,因此您会发现更容易理解过滤器和聚合的工作原理。

希望对你有帮助。

【讨论】:

【参考方案4】:

这是与此问题相关的替代解决方案。然而,它可能并不适用于所有情况,但如果你可以使用它,它会更简单(在我看来比聚合更安全)。

我将使用panels。一旦您创建了一个面板来显示您的实体(节点或其他任何东西),您就可以添加多个视图并将它们显示在内容旁边。这些视图之一将成为我们的相关内容。 因此面板是唯一的限制。 也许可以用小面板来表示成一个块,我自己没试过。

先决条件

观看次数(哦!) 面板 Views Content Pane:无需下载,在ctools模块中随views一起下载。 页面管理器:与视图内容窗格相同(可选/强烈推荐)。

景色

    像往常一样创建视图,但不要将其创建为块或页面。取消选中两者。

    在视图配置页面中,在实体上创建与分类术语的关系

    创建一个上下文过滤器来过滤:分类术语:术语 ID

    创建另一个上下文过滤器实体ID内容:Nid(如果它是一个节点)。

    创建此字段时,底部有一个折叠的字段集,其中包含以下选项:排除。按照标记进行检查。

    现在通过单击添加创建一个类型为内容窗格的新显示。

    在显示配置区域(名为:窗格设置)中打开参数输入。您应该有 2 个选项:

    Content: Nid source : 将它的来源设置为 From context。将它的 Required context 设置为 Content ID (如果您不使用节点,它可以是 ID分类术语:术语 ID 来源:将其来源设置为来自上下文。将其必需的上下文设置为术语ID

恭喜!您已完成创建视图。是时候讨论小组了(我不会过多解释关于创建小组的内容,因为它超出了本 Q/A 的范围)。

小组

    创建面板(或启用 node/%node 默认面板并添加变体)。

    context 选项卡中,在实体上创建与分类术语的关系

    在其中一个窗格中单击添加内容。

    如果您没有更改视图的类别,请在 视图窗格 中添加它。它将要求您的面板上下文中现在都提供实体 ID 和术语 ID,设置它们。

    现在显示面板时,除本页内容外,所有同名的内容都会显示出来。

视图配置

上下文过滤器

参数输入

重要补充:

这个方法已经试过了,而且效果很好,但是在写这篇文章的时候,ctools 有一个错误。有一个补丁:https://www.drupal.org/node/2195211

【讨论】:

【参考方案5】:

我不确定我是否完全了解您的问题,但我认为节点队列就是答案。查看http://drupal.org/project/nodequeue

该模块开发良好。我已经将它用于客户端,您也可以使用他们的 smartqueue api 来制作您的列表。

希望我对您有所帮助。

【讨论】:

以上是关于在 Drupal 7/Views 3 中创建相似节点列表的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 7 Views 3:搜索特定字段的公开过滤器

Drupal 7 Views 3:显示显示节点的数量?示例:(显示 5382 个结果中的 3842 个)

如何在 Drupal 中创建具有三个细节层的时间线?

你能在 Drupal 中创建自己的 Hook 吗?

Drupal 7 Views 自定义视图模板字段

在Drupal中创建一个Context View,然后根据NID(node id)显示在Panel中