Viewlet Manager Viewlet Plone 檔案系統

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

2012-08-27
在前篇文章裡,透過ZMI和網頁介面,已經完成不少佈景主題的調整,有了這些知識和經驗,接下來,我們要在檔案系統裡練習程式碼的調整方式,認識更多佈景主題的相關細節,包括main_template.pt的語法細節、Viewlet Manager的調整方法和Viewlet的註冊方式。
視覺元件技術項目

在Plone視覺元件架構裡,最底層的技術項目,彼此之間的關連性可以用圖7來表示。


▲圖7 視覺元件的關連示意。

對照plone3_theme專案的檔案目錄樹狀圖,更容易了解上述技術項目的關係,如圖8所示。


▲圖8 plone3_theme專案的檔案系統樹狀圖。

我們把plonetheme.mytheme.egg-info、setup.cfg、setup.py之類的檔案從樹狀圖裡移除,因為它們屬於Python egg的設定內容,暫時不需要理會。

首先要關注的是「plonetheme/mytheme」目錄裡的configure.zcml檔案,它註冊了模組的起始資訊,包括通知系統導入其他ZCML檔案或目錄,以<include package=".browser />為例,當中的.(點符號)代表和configure.zcml同樣位置的目錄,如圖9所示。


▲圖9 plonetheme.mytheme/configure.zcml範例。

常見的佈景主題修改工作,例如調整Viewlet的顯示與否、順序位置等,只需要修改Viewlet Manager的設定值。更複雜的調整工作,例如自訂型別的顯示方式,則需要註冊新的Viewlet Manager、Viewlet、Browser View等。接著,將示範修改的方法。

Viewlet Manager管理方式

從Zope 3.2開始,content provider是產生網頁內容的元件,通常以Page Template型式存在,在前文裡,介紹過main_template是控制Viewlet Manager的重要檔案,它的預設位置在「Products/CMFPlone/skins/plone_templates/main_template.pt」。

這個檔案只呼叫Viewlet Manager,再由Viewlet Manager管理Viewlet的細節,包括註冊、順序、顯示方式等。

以檔案裡的<div tal:replace="structure provider:plone.portaltop" />為例,provider表示式是配合Zope 3而生的新語法,用來呼叫content provider,像Viewlet和Viewlet Manager是兩個常見的content provider。

所有的Viewlet Manager和Viewlet定義在plone.app.layout模組的viewlets目錄裡,在「viewlets/configure.zcml」檔案可以找到定義值,範例如圖10所示。


▲圖10 Viewlet Manager的定義範例。

範例裡的IPortalHeader是一個marker interface,實作這個介面的Viewlet Manager名稱是plone.portalheader,它將管理plone.skip_links、plone.searchbox、plone.logo、plone.global_sections、plone.personal_bar這幾個Viewlet,範例如圖11所示。


▲圖11 Viewlet的定義範例。

範例內的若使用manager=".interfaces.IPortalHeader"的話,就是歸屬plone.portalheader的Viewlet。

以plone.logo這個Viewlet為例,它的Python Class定義在「viewlets/common.py」檔案,內容如圖12所示。


▲圖12 plone.logo的Python Class範例。


追蹤我們Featrue us

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

我知道了!