Plone NoSQL 自由軟體

用自由軟體Plone來架設網站(8)

2012-09-24
前一期示範了幾個常見的版面調整工作,並在檔案系統裡直接管理程式碼。接下來,將說明Plone的內容查詢操作,包括如何建立詞彙表、測試選項欄位、安裝導覽查詢模組以及啟用導覽查詢選項等等。
把Plone內容資料儲存在系統之後,接下來的主要工作,就是依照顯示需求把它們找出來。

常見的查詢條件範例,包括依照欄位屬性值查詢關鍵字詞、依照工作流程狀態篩選以及依照日期屬性值排序。

如果資料量龐大的話,還要考慮非同步索引,結合AJAX技巧,設計動態回應資料的方式,以改善系統的反應效能和操作性。

Plone使用ZODB物件資料庫,屬於NoSQL世界的一份子,它的運作方式與傳統SQL資料庫不同,但透過ZCatalog的索引工具,ZODB的搜尋結果可以視同SQL世界的表格資料,方便進行存取或排序的操作。

本文將利用之前的mysite.eventfolder模組,還有新的EEA Faceted Navigation模組作為示範,介紹Plone內容查詢與顯示的技巧。

選項式欄位

之前練習建置mysite.eventfolder模組時,曾見過StringField和DateTimeField兩種欄位類型,而DateTimeField搭配的CalendarWidget就是一種選項式欄位,專門用來選擇日期時間的資料內容。如果要在Archetypes表單裡自訂選項,該完成哪些步驟呢?

首先,要決定欄位屬於單值或多值,也就是「單選」或「複選」。單值的情況較為單純,通常使用StringField加上SelectionWidget就行。以新增一個Event Type為例,其程式碼範例如下頁圖1所示。


▲圖1 單選欄位的程式碼範例。

比較特別的是vocabulary_factory設定項,我們指定'event.type'作為選項的參照名稱。慣例上,vocabulary的參照內容定義在content/vocabularies.zcml和content/vocabularies.py兩個檔案裡,因此,在content/configure.zcml引入vocabularies.zcml檔案(圖2)。


▲圖2 引入vocabularies.zcml的設定範例。

建立詞彙表

上述vocabulary指的是詞彙表,也就是選項式欄位的候選內容。接著建立vocabularies.zcml的內容,目的是註冊詞彙表元件(圖3)。


▲圖3 vocabularies.zcml的範例內容。

在ZCA元件架構裡,vocabulary是一種utiltiy元件,日後再介紹這些進階元件的原理。不過,明顯地,範例裡註冊了一個名稱為event.type的元件,它的程式碼則要到同目錄裡的vocabularies.py檔案尋找,內容如圖4所示。


▲圖4 vocabularies.py內容範例。

EventType類別implement介面IVocabularyFactory,並主動回傳items詞彙表內容,例如Conference、Meeting、Training的選項值。

測試選項欄位及詞彙表

之前介紹過buildout.cfg檔案裡,指定develop=src/mysite.eventfolder的方式,除此之外,也可以在develop.cfg檔案指定開發中的程式碼,如圖5所示。


▲圖5 develop.cfg設定範例。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!