2009/04/21

BigramSplitter

World Plone Day 2009 台北場在四月22日,於國泰醫院本館第三會議室舉行。值得一提的是,日本朋友 堀田直孝 Naotaka Hotta 到場介紹 BigramSplitter 並尋求試用回報。我用剛裝好的 Plone 3.2.1 來測試,簡單新增一個 Page 並上傳 Word PDF 檔案各一,在 Linux 環境先把 wvware 與 xpdf 裝好,就可以自動對 Word PDF 進行索引。

2009/04/13

Plone3 Books

Plone 3.x 在 2007 年八月首次問世,如今 Plone3 的書籍也算是完整出版,由淺到深,它們分別是 A User's Guide to Plone、Practical Plone 3: A Beginner's Guide、Plone 3 Theming、Professional Plone Development。像 Content Rule和 buildout 的設定技巧,就分別在 Practical Plone 3 和 Professional Plone Development 裡詳細介紹。
雖然 Plone3 著重「更方便的開發環境」,本質上還是 Zope 2 的機制,但離令人期待的 Plone4 或 Zope 3 又近了一步。

2009/04/09

Plone 2.5 to 3.0 Migration

想要昇級 Plone 2.5.x 網站到 3.x 的話,Upgrading Plone 2.5 to 3.0 和 Plone.org Migration Steps 是兩篇值得參考的資料。以往直接昇級 Data.fs 的經驗是,如果 portal_migration 能成功,大抵就搞定,但現在額外發現 plone_kss 沒成功加入 portal_skins 的 layer 設定值,而且 Plone 2.5 裡 portal_skins 沒用到的 layer 要事先刪除,不然昇級完的 Plone 3 網站首頁顯示會有問題。

2009/03/30

Flash-style Banner

在 Plone 上直接於表頭區擺 flash 檔,是個不小的系統負擔,比較輕量的方法是利用 KSS 或 jQuery,或是借力於 Carousel。
http://fjelleiligheter.no/ 可看到範例。
至於 zope.conf 裡 TimeZone 的設定方法能否成功,我得看到「錯誤訊息」,才能判斷可能的下一步。

2009/03/20

Make Plone3 Forms the easy way

plone.app.z3cform 能讓 Plone3 應用 z3c.form 來建立表單。在 Plone2 初期開始引用 Archetypes 工具建立表單,此方案過於複雜,不適合建立獨立而簡單的表單場合。另一個 zope.formlib 工具,也有人覺得 adaptability 與 widget 不足。

在架構上,最底層是 z3c.form,而 plone.z3cform 是 z3c.form 的介面,最後再由 plone.app.z3cform 提供 widget 與 utility 給表單開發者。使用 plone.app.z3cform 所建立的表單,原則上就等同於利用 z3c.form 在 Zope 3 環境裡所建立的表單,開發過程也可直接參考 z3c.form 的文件。

更多範例可參考 http://plone.org/documentation/how-to/easy-forms-with-plone3 和 http://kayeva.wordpress.com/2008/07/16/using-z3cform-for-our-forms-in-plone

也可以 svn co https://svn.plone.org/svn/collective/collective.dancing/trunk/collective/dancing 查看 Singing & Dancing 的程式碼範例。

2009/03/07

Catalog to Speed Up Plone

在 Plone 資料夾裡呼叫所有的內容項目,會讓系統效能大受影響,非必得已,應降低這類的動作。早期 Plone 的導引清單因為設計還不成熟,成為效能殺手的主因之一,但隨著 Plone 2.1 和 ExtendedPathIndex 的問世,情況已大幅改善。

查詢目錄內容項目清單的方法有好幾種,但 objectValues() 和 contentValues() 則是最耗資源的兩種,應優先考慮改用 catalog 工具,範例如下:
 catalog = getToolByName(self, 'portal_catalog')
results = catalog.searchResults(
path = {'query' : '/'.join(self.getPhysicalPath()),
'depth' : 1 },
sort_on = 'getObjPositionInParent',
)
更多資訊可參考 http://plone.org/documentation/tutorial/richdocument/folder-listings

2009/02/04

UnicodeEncodeError in Plone

記錄一個 Plone 除錯訊息,發生在會員帳號管理介面。

ERROR Zope.SiteErrorLog http://mysite.com:8080/MySite/prefs_users_overview
Traceback (innermost last):
Module ZPublisher.Publish, line 119, in publish
...
Module zope.tales.tales, line 696, in evaluate
- URL: file:/home/marr/Plone317/zinstance/parts/ \
plone/CMFPlone/skins/plone_templates/batch_macros.pt
- Line 43, Column 8
- Expression:
- Names:
...
'request': ,
'root': ,
'template': ,
'traverse_subpath': [],
'user': }
Module Products.PageTemplates.ZRPythonExpr, line 49, in __call__
- __traceback_info__: '%s?%s' % (url , mq( request.form, {batch.b_start_str:n.first} ))
Module PythonExpr, line 1, in
Module ZTUtils.Zope, line 181, in make_query

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: \
ordinal not in range(128)

第一次遇到它,是在仿照 http://tomster.org/geek/plonezope/importPASfromCSV.py/view 批次建立會員帳號後發生,後來讀到 http://dev.plone.org/collective/changeset/67165 似乎開啟曙光,在 CMFPlone/patches 裡 unicodehacks.py 和 unicodeFallbackPatch.py 也有線索,希望能即早解決這問題。