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

时间:2012-05-04 18:49:00

标签: drupal drupal-7 drupal-views

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

我面临一个相当普遍的问题,即显示与当前节点类似的节点列表。类似节点被定义为具有当前节点具有的至少一个分类术语的节点。作为模块提供的解决方案很少,但是我发现的模块(特别是按术语类似)在Drupal 7中处于测试阶段(如“不能正常工作”)。

我还发现了一些基于视图和上下文过滤器(例如http://scito.ch/content/show-related-nodes-block-based-taxonomy-terms-views-3-and-drupal-7)或关系的解决方案。我非常喜欢这种方式,因为它节省了我安装额外的模块和主动开发和支持的视图我宁愿使用它们而不是任何自定义解决方案。我无法解决的问题是如何按照他们共享的术语数量对“类似节点”进行排序。例如,如果我的“IPhone 4S”节点带有术语“小工具”,“Apple”和“电话”,我希望按以下顺序使用类似的节点:

  1. iPhone 3(Apple,Gadget,Phone)
  2. iPad(Apple,Gadget,Tablet)
  3. Mac(Apple,Computer)
  4. Bramley(Apple,Fruit,Tree)
  5. 如何根据共享的术语数量对此视图中的节点进行排序?

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

5 个答案:

答案 0 :(得分:81)

  1. 创建一个块视图
  2. 添加上下文过滤器 - >内容:Nid - >提供默认值 - >来自网址
  3. 的内容ID
  4. 添加关系 - >内容:节点上的分类术语 - >指定适当的词汇
  5. 添加关系 - >分类术语:使用上面指定的词汇表的内容 - >选中“要求此关系”
  6. 启用视图聚合(注意:下面屏幕截图中的箭头指向错误的位置,应该指向下方的2行)
  7. 假设您仅列出标题,请编辑标题字段以使用您在上面#4中设置的关系。
  8. 添加内容的新排序条件:Nid。在聚合设置中,选择“计数”。使用#4中的关系并按降序排序
  9. 添加上下文过滤器 - >内容:Nid - >使用#4 - >中的关系提供默认值 - 来自网址的内容ID - >向下滚动并展开“更多”,然后选中“排除”以从视图中删除当前节点
  10. **请参阅@ garret-albright的评论,以便在Views UI预览中对此进行测试。 **

    Related node view

答案 1 :(得分:2)

猜猜是什么 - 也有modules:D

我可以建议similar by terms在没有配置麻烦的情况下为您提供该视图。

答案 2 :(得分:0)

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

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

先决条件

  • 观看(噢!)
  • 面板
  • 观看内容窗格:无需下载,在 ctools 模块中下载了视图。
  • 页面管理器:与视图内容窗格相同(可选/强烈推荐)。


视图

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

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

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

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

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

  5. 现在点击添加,创建一个类型为内容窗格的新显示。

  6. 在显示配置区域(命名为:窗格设置)中,打开参数输入。你应该有两个选择:

    • 内容:Nid源:将其源设置为 From context 。将必需上下文设置为 Content ID (如果您不使用节点,则可以 ID
    • 分类标准术语:术语ID源:将其源设置为 From context 。将必需上下文设置为 Term ID
  7. 恭喜!您已完成创建视图。这是一个小组的时间(我不会解释有关创建小组的内容,因为它超出了本Q / A的范围)。

    小组

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

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

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

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

    5. 现在,当显示面板时,将显示所有包含相同术语但不包含此页面内容的内容。

    6. 视图配置

      Views Configuration

      上下文过滤器

      Contextual filter

      参数输入

      Argument input

      重要事项:

      尝试了这种方法并且它完美无缺,但在撰写本文时,ctools有一个错误。有一个补丁:https://www.drupal.org/node/2195211

答案 3 :(得分:-1)

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

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

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

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

希望它有所帮助。

答案 4 :(得分:-2)

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

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

希望我能提供帮助。