2012-03-23 50 views
10

我們正在編寫一些代碼來控制從Tridion Broker數據庫查詢(使用API​​)返回的結果的分頁。Tridion分頁 - 獲取結果總數

我們使用的是SDL Tridion 2011 SP1,並且可以使用PagingFilter獲取所選頁面上組件的tcmIds。

但是,在寫出分頁控件時,我們需要知道結果的總數(以確定將有多少頁)。有沒有一種更有效的機制來完成這個工作,而不僅僅是爲'全部'結果運行一個單獨的查詢並對字符串數組返回一個.Length? (顯然你只會運行這個查詢一次,並保持該值,因爲用戶點擊頁面之間)

如果我們得到所有的結果,那麼爲什麼我會打擾使用PagingFilter,當我們可以只處理返回的信息在'全部'查詢中?

很多感謝, 喬納森

注意:有可能會是一個最大的2000個結果返回的任何一種類型的。

+0

我知道前內容交付返回的對象被緩存,但現在(完全匹配)代理查詢被緩存(自Tridion 2011?) - _也許_可能是使用特定過濾器的原因?我已經看到了基於JavaScript的分頁,但不能確定比兩種查詢方法更好的想法。 – 2012-03-23 13:25:48

+1

偉大的問題喬恩,看起來不像你可以做一個「COUNT(....)」風格的查詢。 – Neil 2012-03-23 13:55:06

+0

謝謝尼爾。是的,我們認爲可能還有更有效的COUNT(...)機制。 如果你知道有多少頁面或者不需要知道有多少頁面(並且處理有效返回的空數組),那麼PagingFilter方法非常有用,但是我認爲這很少見。 – 2012-03-23 14:21:01

回答

6

我有3個可能的答案給你,雖然沒有一個可能是正確的或你想要的。

  1. 沒有辦法使用CD API來讀取返回項目的COUNT。你可以寫一些延伸。無論是CD存儲擴展,還是直接的數據庫查詢等。

  2. 您讀取了您的收藏中的物品的確切數量。如果您對組件使用查詢,這樣做尤其棘手,因爲有意爲這些組件檢索DCP。可能是因爲給定組件沒有DCP,因此您需要先閱讀所有DCP才能知道要分頁的項目的確切數量。顯然這將打敗分頁的整個目的。您可以通過運行一次查詢來緩解這種性能下降,然後緩存一段時間,但根據您查詢的內容,可能每個網站訪問者都會查詢不同的條款,因此性能受到很大影響。

  3. 你並不關心分頁中的項目總數。因此,例如,不要顯示「第1頁,共23頁」,「第2頁,共23頁」等,您只需在頁面旁邊顯示頁面1和頁面2的下一頁和上一頁按鈕。

希望這有助於!

+0

謝謝Mihai。我沒有考慮過沒有DCP對組件的影響(正如你在第二個建議中強調的那樣)。我喜歡CD存儲擴展的想法(因爲我們可能必須允許網站用戶在以後過濾)。但是,現在我認爲我們可能會實施建議2並使用緩存。非常感謝! – 2012-03-23 17:23:31

8

在發佈組件的過程中,您可以實現TBB來計算所有已發佈的組件,然後將結果作爲使用標準system.io函數讀取的二進制文件發佈到文本或XML文件中。您也可以專門發佈一個單獨的DCP來保存計數(然後您需要每個發佈的模式和組件)。

這個想法是確定計數在呈現時間,並以某種方式發佈該數字。在演示端拉出單個數字肯定會比拉動2000個DCP更快。

+0

謝謝Nickoli。我認爲這是一個很好的答案,並同意在發佈時間這樣做會更有效率。我認爲,爲了得到Tridion客戶端之間的一致性,想出一個'最佳實踐'eXtension實現是很好的....只需要現在就找時間! – 2012-08-29 13:47:37