內容查詢網頁組件的新功能
內容查詢網頁組件的新功能
大家好,我是 Dustin Anglin,目前擔任企業內容管理小組程式技術經理。今天要來談談我們對大家最常用的一個網頁組件「內容查詢網頁組件」 (也就是常見到的縮寫「CQWP」),所開發的新功能。
若您還不了解這個網頁組件,請參考 Jim Masson 所寫的 ECM 概觀 (可能為英文網頁) 及 Sangya Singh 所寫的 WCM 概觀。
新手如何應用 CQWP
如果您還未用過 CQWP,我先簡單說明一下它的功能及用途。
「內容查詢網頁組件」是在設計網站時所用的一項工具,您可以在它簡單易用的使用者介面上建立查詢,彙整網頁上有趣且相關的資訊,並以獨特、可設定的方式顯示這些內容。
CQWP 用於傳回若干不同範圍中的彙整內容,此範圍可小至單一清單或文件庫,大至整個網站集合中的所有清單或文件庫。在 SharePoint 2010,CQWP 單一清單查詢也已最佳化成可處理大型單一文件庫,因為它將利用智慧索引及其他工具,改善大型文件庫的查詢效能。
如需更深入了解 CQWP,建議參考 George Perantatos 所寫的 SharePoint 2007 部落格文章 (可能為英文網頁)。
利用 CQWP 建立相關新聞網頁組件
我發現要讓人了解某個概念最快的方法,就是舉例說明,所以本文會以一個典型範例來說明如何使用 CQWP 顯示目前所閱讀新聞的相關新聞。另一方面,因為這個範例不需要舊新聞,所以網頁組件會設成只顯示最近的新聞,譬如上星期的新聞。
建置查詢:根據內容進行查詢
「內容查詢網頁組件」強大之處在於它在頁面上呈現所得查詢內容的方式;不過,我並不想每次建立一則新聞都要對網頁組件區加入一個新的 CQWP,尤其是一直重複使用同一個網頁組件。
SharePoint 2007 可以對版面配置新增 CQWP,讓某類型版面配置的所有頁面上都出現此 CQWP (譬如以本範例來說,您可以建立「新聞文章」版面配置),不過,問題是,只能在該網頁組件上建立一個查詢,這表示,使用「新聞文章」版面配置的所有頁面都會傳回相同結果集。
但我們希望每個「新聞文章」頁面顯示的新聞是與當下所閱讀的「目前文章」相關,例如,閱讀體育新聞時就顯示其他與體育相關的新聞。
此外,我們還需要有個中繼資料欄位,說明目前文章屬於哪一類「新聞文章」,如「體育」、或「財經」,因此會新增一個新的「受管理的中繼資料」欄位稱為「新聞類別」,此欄位可連結到「字詞庫」,我們可以在字詞庫中建立新聞類別的受管理分類法,好讓作者從中選取。
下面就是這個「新聞文章」頁面的概念性綱要:
上面已說明要讓這個網頁組件能隨目前文章內容而變動,特別是在目前文章的「新聞類別」部分。在 SharePoint 2010,只要利用兩個很好用的新 Token 來設定查詢篩選,即可辦到這件事。
PageFieldValue
這個 Token 可讓您指定目前版面配置中的一個欄位當作篩選值,它會動態地將篩選值取代成目前頁面的欄位值。
例如:本範例建立一個自訂的「受管理的中繼資料」欄位,稱為 "News Category" (新聞類別),來指定新聞類別是屬於哪一類新聞 (財經、政治、國際要聞、體育等等),再將它新增至「新聞文章」版面配置。藉由 PageFieldValue Token,查詢作業就會隨著目前頁面所屬的新聞類別而變動,譬如目前頁面所屬類別是 "Sports" (體育),查詢就會傳回標記為 "Sports" 的結果。
PageQueryString
這個 Token 與 PageFieldValue Token 一樣,您可以選擇要用於查詢的 URL 查詢字串值。
例如:您可以對 URL 新增查詢字串值,如 “&NewsCategory=Sports”,並設定 CQWP 的查詢傳回 [News Category] 欄位等於 "Sports" 的頁面,或等於任何目前在查詢字串中的值。
若您想在同一個網頁組件中顯示不同結果集,而不是讓每個不同結果集各別顯示在不同頁面,最好使用查詢字串參數。
以本範例來說,我們會使用 PageFieldValue Token 將 CQWP 設定成若某新聞文章 [News Category] 欄位的中繼資料值,與目前文章的 [News Category] 欄位相同,則傳回該新聞文章。修改自訂「新聞文章」版面配置,會使 CQWP 自動顯示在所有新的「新聞文章」頁面上,且已是完成設定,可顯示相關新聞文章。
請仔細看看這個查詢,我在其中新增了另外兩個篩選。第一個篩選用來篩選與目前文章同名的文章 (主要是為了確保目前文章不會出現在查詢結果中),另一個篩選則是傳回過去 7 天內所建立的新聞文章,以確保結果中的文章都是最新的。
此外,在本範例中,[News Category] 中繼資料欄位是屬於全新「受管理的中繼資料」欄位之一,CQWP 可完全支援這類欄位,包括單值或多值變化。除了本範例所示範的篩選類型之外,CQWP 也支援篩選 [企業關鍵字] 欄位及 [所有標記] 欄位,後者可尋找查詢項目中的任何受管理中繼資料標記,無論在項目中是哪個中繼資料欄位包含該標記。
顯示結果:從工具窗格進行欄對應
有些人喜歡撰寫 XSLT 程式,那就按個人喜好撰寫 XSLT 程式吧,希望這種作法會帶來更強大的作用。不過,至於我們這些其他人,有人可能會認為,大部分的開發人員 (我們還是很欣賞 XSLT 程式設計者),最不想以 XSLT 顯示眾多欄位。
在 SharePoint 2010,CQWP 最酷的功能之一,就是可以直接在工具窗格使用者介面中選取要顯示的欄位,既然我們已經完成查詢的定義工作,現在就開啟 [版面] 區段來看看。
進入工具窗格的 [面板] 區段,會看到一個新的區段稱為 [要顯示的欄位] (Fields to display),其中輸入的欄位是要顯示成任何已定義的 XSL 樣式。譬如有個空白範本稱為「項目樣式」,其中定義了可顯示的項目數目,及呈現位置 (但不是顯示這些項目的欄位)。選好範本之後,只要在要顯示特定「項目樣式」的區域中輸入所需顯示的欄位,這樣該區域就會帶入這些欄位。
我選擇的樣式是在左側有個圖樣,且以文章標題來表示頁面連結,外加一小段文章摘錄 (這是我為自己的版面配置所定義的「自訂欄位」)。在這些每個區域中輸入我要顯示的欄位後,就得到下面的結果:
處理 XSLT 的時間總共:0.0 秒! 很棒吧!
範例歸納總結
看看我們上面做了哪些動作:
- 只在一個地方修該版面配置之後,所有新聞頁面上都加入了 CQWP 網頁組件
- 將網頁組件查詢設定成可依照目前網頁內容動態執行查詢 (也就是,若是閱讀體育文章就傳回體育相關文章,若是閱讀財經文章就傳回財經相關文章,以此類推)
- 將網頁組件的呈現方式設定成顯示自訂欄位,而不必撰寫自訂的 XSLT
最後產品外觀就是:
現在,只要我的內容作者發出新聞稿,每篇文章就會有個網頁組件顯示最近相關文章,他們根本不必為網頁組件及查詢操心。
結語
這只是您可以藉由「內容查詢網頁組件」強大的內容導向查詢功能,及既簡單又不需太多程式碼的設定,就能辦到的新奇酷炫應用範例之一。歡迎您常來查閱更多關於 CQWP 及 SharePoint 2010 中其他令人讚嘆的全新 ECM 功能資訊。
這是翻譯後的部落格文章。英文原文請參閱 What’s New with the Content Query Web Part