2010-04-05 278 views
1

我有兩個視圖我想合併成一個視圖。將兩個視圖合併到一個視圖中

第一個視圖顯示公司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

回答

2

從MySQL的角度來看,逐字段語法將是處理這個問題的適當方式。例如:

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

如果有一個模塊將這種功能添加到視圖,但AFAIK,它不存在,那將是非常好的。

如果你想在不編程的情況下解決這個問題,我認爲你可以使用規則模塊自動設置公司ID = Y的節點上的'sticky'複選框。在這個位置上,你可以訂購View上的粘性值。

+0

「粘滯「地位就像一個魅力,不需要黑客!嗚呼。謝謝。 – Kevin 2010-04-09 14:56:50

1

沿着「粘性」理念的線,如果你不希望覆蓋,也許你可以一個複選框字段添加到公司類型 - isClient。除了客戶端以外,每個人都應該是虛假的,然後按此排序。

我還沒有這樣做,但也許你需要創建兩個版本作爲附件,並將它們都附加到另一個顯示...?

0

創建第二個視圖作爲附件並將其附加到第一個視圖。
將全部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

0

客戶端參數如何傳遞給視圖?作爲一個url參數?如果是的話,你可以創建你的第二個視圖,如我概要here,然後選擇在適當的位置排除參數選項。

+0

CompanyID只是來自一個過濾器 – Kevin 2010-04-06 19:09:37

0

通常最簡單的方法是使用一個小的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

0

稍後...但我發現僅使用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」如果你正在使用它)

就是這樣!

相關問題