将两个视图合并到一个视图中

问题描述:

我有两个视图我想合并成一个视图。将两个视图合并到一个视图中

第一个视图显示公司ID = Y的X的所有项目。这是首先给予客户端的首选,然后是其他所有人。

所以我创建了第二个观点,X,其中公司ID!= Y.

我创造了它作为附件附加到第一个视图的所有项目,但我不认为我得到了意结果。

如何组合这些视图,以便首先列出第一个视图结果,然后使用相同的传呼机,过滤器和参数,然后是第二个视图?

有没有什么办法可以实现这一点,而不编程呢?

+0

看看这个教程:http://sethsandler.com/code/drupal-6-creating-activity-stream-views-custom-sql-query-merging-multiple-views-part-1/ – madmatter23 2012-03-02 06:06:14

从MySQL的角度来看,逐字段语法将是处理这个问题的适当方式。例如:

SELECT * FROM tickets ORDER BY FIELD(priority, 'High', 'Normal', 'Low'); 

如果有一个模块将这种功能添加到视图,但AFAIK,它不存在,那将是非常好的。

如果你想在不编程的情况下解决这个问题,我认为你可以使用规则模块自动设置公司ID = Y的节点上的'sticky'复选框。在这个位置上,你可以订购View上的粘性值。

+0

“粘滞“地位就像一个魅力,不需要黑客!呜呼。谢谢。 – Kevin 2010-04-09 14:56:50

对于drupal 5有意见联盟。有人为D6开了一些东西,但我不知道他们有多远。

http://drupal.org/node/275162

沿着“粘性”理念的线,如果你不希望覆盖,也许你可以一个复选框字段添加到公司类型 - isClient。除了客户端以外,每个人都应该是虚假的,然后按此排序。

我还没有这样做,但也许你需要创建两个版本作为附件,并将它们都附加到另一个显示...?

创建第二个视图作为附件并将其附加到第一个视图。
将全部Inherit arguments,Inherit exposed filtersInherit pager设置为Yes

+0

那就是我所做的,但是它显示了2个寻呼机,其中一个视图结束,另一个开始。 – Kevin 2010-04-06 19:08:44

+0

好吧,我创建了这样的测试视图: - 带过滤器的页面显示。 - 与另一个过滤器的附件显示。 - 我在主显示屏之前附加了附件。 - 我设置Inherit参数,继承暴露的过滤器和继承寻呼机是和渲染寻呼机编号 它工作_almost_罚款。一个传呼机出现在主显示器下面,影响附件。 但是有一个很大的问题,我认为它会让你重新考虑所有的方法:如果附件显示比主显示有更多的“页面”显示,你不能访问它们。传呼机只有链接到主显示页面;不再。 – farzan 2010-04-06 19:31:06

客户端参数如何传递给视图?作为一个url参数?如果是的话,你可以创建你的第二个视图,如我概要here,然后选择在适当的位置排除参数选项。

+0

CompanyID只是来自一个过滤器 – Kevin 2010-04-06 19:09:37

通常最简单的方法是使用一个小的hook_query_alter,但这需要少量的编程。

+0

有了意见,我相信有一个专门的,特定的功能来改变视图查询。这是去年左右以来的新情况。我试图在hook_query_alter之前改变视图查询,结果证明代码非常混乱。 – James 2011-04-18 02:53:30

+0

这是正确的,但有时如果视图不支持,则需要直接编辑查询。您提到的方法是hook_views_alter,但您可以在advanced_help文档中找到所有信息 – messedup 2011-04-18 04:30:39

稍后...但我发现仅使用Views模块一个更好的解决方案

  1. 创建块视图与显示你需要的第一个列表(“all items of X where company ID = Y”)
  2. 创建另一个观点,即必须是“页面视图”与第二列表(all items of X, where company ID != Y
  3. 在这第二种观点的“HEADER”的设置,单击“Add”,然后选择“Global: View area”。
  4. 在“View to insert”列表中,选择您所创建的第一个(并勾选“Inherid contextual filters”如果你正在使用它)

就是这样!