30

从 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”,我希望类似节点按以下顺序排列:

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

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

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

4

5 回答 5

83
  1. 创建块视图
  2. 添加上下文过滤器 -> 内容:Nid -> 提供默认值 -> 来自 URL 的内容 ID
  3. 添加关系 -> 内容:节点上的分类术语 -> 指定适当的词汇表
  4. 添加关系 -> 分类术语:使用上述词汇的内容 -> 勾选 需要此关系
  5. 打开视图聚合(注意:下面屏幕截图中的箭头指向错误的位置,应该指向它所在位置下方的 2 行)
  6. 假设您仅列出标题,请编辑标题字段以使用您在上面 #4 中设置的关系。
  7. 添加新的内容排序标准:Nid。在聚合设置中,选择计数。使用 #4 中的关系并降序排序
  8. 添加上下文过滤器 -> 内容:Nid -> 使用 #4 中的关系 -> 提供默认值 - 来自 URL 的内容 ID -> 向下滚动并展开“更多”,然后选中“排除”以从视图中删除当前节点

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

相关节点视图

于 2012-07-06T18:28:08.917 回答
2

猜猜看 - 也有模块:D

我可以推荐类似的术语,为您提供该视图而无需配置麻烦。

于 2015-02-18T10:50:08.647 回答
0

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

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

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

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

希望能帮助到你。

于 2013-05-27T06:24:09.610 回答
0

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

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

先决条件

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


风景

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

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

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

  4. 创建另一个上下文过滤器实体 ID或内容:如果是节点,则为Nid 。

    • 在创建这个时,底部有一个折叠的字段集,其中包含选项:Exclude。按照标记进行检查。

  5. 现在通过单击Add 创建一个类型为Content pane的新显示。

  6. 在显示配置区域(名为:Pane settings)中打开Argument input。您应该有 2 个选项:

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

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

小组

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

  2. 上下文选项卡中,在实体上创建与分类术语的关系。

  3. 单击其中一个窗格中的添加内容。

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

  5. 现在显示面板时,除了本页的内容外,所有具有相同术语的内容都会显示出来。

视图配置

视图配置

上下文过滤器

上下文过滤器

参数输入

参数输入

重要PS:

这种方法已经过尝试,并且可以完美运行,但是在撰写本文时,ctools 有一个错误。有一个补丁:https ://www.drupal.org/node/2195211

于 2014-09-16T18:46:32.947 回答
-2

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

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

希望我对您有所帮助。

于 2012-05-20T17:28:42.627 回答