Drupal 6、CCK 和视图中的循环排序

Posted

技术标签:

【中文标题】Drupal 6、CCK 和视图中的循环排序【英文标题】:Circular Sorting in Drupal 6, CCK & Views 【发布时间】:2011-03-23 21:42:09 【问题描述】:

我今天收到一个客户的有趣请求,但我不确定使用 Drupal Views 解决它的最佳方法。他们目前有一个代表其员工成员的“团队成员”内容类型。每个工作人员页面都有指向所有其他工作人员页面的链接。到目前为止,这不是问题。

他们希望这个列表从我们目前正在查看的人开始,然后按照“排序”的顺序排列紧随其后的人。然后当它到达列表的末尾时,它会环绕并从头开始,直到它们回到自己(类似于循环链接列表的工作方式)。

例如,假设我有团队成员 A、B、C、D、E、F 和 G:

如果我正在查看团队成员 A,则列表顺序为:A、B、C、D、E、F、 G. 如果我正在查看团队成员 D,则列表顺序为:D、E、F、G、A、B, C. 如果我查看团队成员 G,则列表顺序为:G、A、B、C、D、E、 F.

如果我在常规编程环境中处理一些其他数据结构,我确信我可以提出某种算法来确定我们目前所处的位置并从那里开始排序并伪造一个“循环列表”。视图似乎有点棘手。

我能想到的唯一可能的解决方案是创建两个单独的视图,然后在事后将结果合并在一起。

    一个视图是排序号大于或等于当前团队成员的所有团队成员的排序列表。 第二个视图是排序号小于或等于当前团队成员的所有团队成员的排序列表。

我只是好奇是否有任何更有效的方法可以对视图进行这种排序?

【问题讨论】:

【参考方案1】:

只要您的所有结果都可以包含在一个页面上,您可能最好使用您提到的解决方案:操作两个视图(可能在模板中,正如 Oswald 所建议的那样),以便一个接一个地显示。但是,如果你最终得到很多结果,并且需要分页......你可能需要做一些花哨的工作来计算排序号之间的差异,并在 ORDER BY 中使用这个值......所有这些都需要困难重写主视图查询的任务。

几年前我尝试过,但遇到了巨大的困难...... Views 的主要开发者,Chaos 的 Merlin,在某处简单地说,Views 真的不适合花哨的编程,它处理查询的方式不会'不允许太多的操纵......事情会破裂。但是,与此同时发生了一些变化……我记得在 Views 中看到了一个新功能,似乎是为了重写主查询。

这里是重写视图查询的教程:http://blog.raisedeyebrow.com/2010/04/rewrite-a-views-query/

请注意:由于视图中发生了许多事情,您应该创建很多虚拟条目以确保没有任何内容被破坏 - 如果您重新编写查询,它将更容易出错。

实际上,如果您熟悉 Drupal 模块构建,对于这样的事情,构建一个允许您更好地控制查询和显示的自定义模块可能更有意义。这实际上可能比大量的实验和测试要快。

【讨论】:

好吧,有趣。我认为现在我可以摆脱两个单独的查询。我宁愿不要把事情复杂化。他们只有 9 名员工,所以我认为这不是问题。无论如何显示视图的方式都不适合分页,所以我认为如果他们需要更多,我们无论如何都必须更改设计。 这听起来确实是最明智的做法。最良好的祝愿。【参考方案2】:

我的选择是主题层。我想这可以在预处理函数中完成。也许您必须覆盖模板文件。 Theme Developer 模块可以告诉您视图是如何呈现的以及可以进行哪些覆盖。

【讨论】:

以上是关于Drupal 6、CCK 和视图中的循环排序的主要内容,如果未能解决你的问题,请参考以下文章

使用 Drupal 进行高级搜索(视图和 CCK)

跟踪RCS中的块/视图/cck等更改,并使用Drupal更新进行迁移。

具有节点引用和 cck3 多组字段的 Drupal 视图

Drupal 6 中的自定义搜索表单:视图/面板还是自定义 sql?

drupal 6和视图节点表单

Drupal,视图:我可以为许多 CCK 字段使用 1 个过滤器吗?