【问题标题】:Creating list of similar nodes in Drupal 7/Views 3在 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”,我希望类似节点按以下顺序排列:

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

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

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

【问题讨论】:

  • 所有分类术语是否都在同一个词汇中?
  • 网站上有几个分类词汇,但为了相似性,只使用其中一个。

标签: drupal drupal-7 drupal-views


【解决方案1】:
  1. 创建块视图
  2. 添加上下文过滤器 -> 内容:Nid -> 提供默认值 -> 来自 URL 的内容 ID
  3. 添加关系 -> 内容:节点上的分类术语 -> 指定适当的词汇表
  4. 添加关系 -> 分类术语:使用上述词汇的内容 -> 勾选需要此关系
  5. 打开视图聚合(注意:下面屏幕截图中的箭头指向错误的位置,应该指向它所在位置下方的 2 行)
  6. 假设您仅列出标题,请编辑标题字段以使用您在上面 #4 中设置的关系。
  7. 添加新的内容排序标准:Nid。在聚合设置中,选择计数。使用 #4 中的关系并降序排序
  8. 添加上下文过滤器 -> 内容: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一起下载。
      • 页面管理器:与视图内容窗格相同(可选/强烈推荐)。


      景色

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

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

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

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

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

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

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

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

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

      小组

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

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

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

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

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

      视图配置

      上下文过滤器

      参数输入

      重要补充:

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

      【讨论】:

        【解决方案5】:

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

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

        希望我对您有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多