2009/11/26

Plone Maintenance Branch

Development process 的討論串裡,談到 Plone 3.x 有許多 package maintenance branch 可從 coredev buildout 的 source.cfg 內容來查詢,如果 package 維護 maintenance branch 的話,就可以在 branch 裡改好再 merge 回 trunk 裡。

2009/11/13

Collection By Example

特定主題的各式內容可能分屬系統裡的不同目錄,例如活動照片被統一放在照片區,心得文件要到部落格區裡找,顯然,單純利用目錄分類的方式,無法有效滿足上述的需求。

在 Plone 裡,更好的方式之一,是利用群集 (Collection) 來分類,它可以從不同位置的多個目錄裡,依據篩選條件來收集內容,可以想像它是一個能夠呈現搜尋結果的網頁。



跟目錄一樣,群集也有多種顯示方式可選擇,包括 Standard view 或 Tabular view 等,預設是 Collection 方式。



在 Edit 頁籤裡,可以看到 Limit Search Results 選項,勾選的話,就可以限定搜尋結果的顯示數量,例如每頁最多顯示前五筆內容。把 Numbers of Items 設為 0 的話,是指一次顯示所有搜尋結果。







每個群集都可以產生 RSS 供外界使用。



最後,或許有比「群集」來得更好的中譯,歡迎朋友提供給我。

2009/11/08

Content Type Migration

由於 Plone 2.5 和 Plone 3.x 的 package 管理方式不同,想要把 2.5 時代的 custom archetype-based content type 改成 3.x 新版格式,可參考 changing product name/structure 的討論,特別留意可能要處理 archetype migration 的動作,也就是改用新版 content type 的情形。
想看 Plone 核心系統如何處理這樣的問題,可以到 Products/CMFPlone/migrations 找看看程式碼,如果是用 archetype 額外寫的小型應用程式,很可能要參考 ATContentTypes 附的 migration 機制。在 Products/Archetypes/Extensions 和 Products/ATContentTypes/migration 可能有細部線索。
如果想再跟上 Plone 4.x 的發展方向,就要考量適合的時機,從 archetype 轉到 dexterity 的開發方式。

2009/11/07

TypeError: iteration over non-sequence

這是將 Data.fs 昇級至 Plone 3.3.1 後,同時使用 Plone 2.x 舊式模組時,遇到的問題,症狀是無法將目錄更名,而這個目錄內含 custom content type 的資料。

第一個線索來自 Plone Error Reference 的說明,表示要留意 log 裡 "Could not import class" 的訊息。不過,我沒在 log 裡看到這類的訊息。

第二個線索來自 Archetype Fields Supporting Multiple Selection 的範例,表示要留意 custom content type 裡的欄位屬性,使用 multiValued = 1 時,要配合 LinesField 的欄位。檢查後,看來也都正常。

第三個線索是 ZMI 裡 custom content type 的 Size 欄位空白,而且 log 裡有下列的訊息:
  Module Products.CMFPlone.CatalogTool, line 272, in getObjSize
Module Products.Archetypes.BaseObject, line 590, in get_size
Module Products.Archetypes.Field, line 1501, in get_size
Module Products.Archetypes.Field, line 1486, in get

綜合以上的線索,我懷疑是 custom content type 曾經改版,但資料早在改版前已鍵入,造成版本不一致。

之前 custom content type 也發生過 AttributeError: __getitem__ 的錯誤,此刻的結論,就是再仔細檢查 custom content type 的內容,而且優先清查 LinesField 欄位。

2009/11/05

Custom Plone Home Page

記錄幾個客製 Plone 首頁畫面的技巧。

以 blog style 的首頁為例,新增一個 collection 把 blog 搜尋出來,再於首頁指定顯示這個 collection 即可。想要同時顯示多個 collection 的話,方法之一是尋求擴充模組的支援,像 ContentWellPortlets 就是一個例子。試用 PortletPage 後,覺得是較合用的選項,它可以把 portlet 新增在上下左右共四個區位。

如果想要修改首頁的顯示方式,可以參考 Create a different look and feel for different sections of your web site 這篇文件,利用 sectional CSS 方式來完成。下面的例子,就是把首頁的 heading 和 byline 都取消顯示。

在 portal_skins/custom 裡新增一個 DTML Method 將 Id 設為 sections.css 後,使用下列範例程式碼:

/* <dtml-with base_properties> (do not remove this :) */
/* <dtml-call "REQUEST.set('portal_url', portal_url())"> (not this either :) */

.section-front-page
.documentFirstHeading {
display: none;
}
.documentByLine {
display: none;
}

/* </dtml-with> */

到 portal_css 裡新增一個 stylesheet 填寫 ID 為 sections.css 其他都使用預設值。必要的話,可以設定 Plone 在 debug mode 執行,並勾選 portal_css 的 Debug/development mode 讓修改結果馬上生效。

還有許多修改技巧,可以在 Plone 3 Theming 這本書裡看到。

另外,使用 Plone 3.3.1 的朋友,可能會發現 collection 設定 criteria 時的錯誤,請參考 Impossible to add a criteria in a collection in 3.3.1 的修訂方法,先處理掉這個問題。