Plone

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

2012-03-14
在前篇文章裡模擬一個小型專案的需求,利用Paste的paster工具,在src目錄裡建立骨架程式碼,新增一個mysite.eventfolder的Archetypes模組專案,執行paster addcontent contenttype之類的指令後,則可以新增型別裡的欄位資訊。熟練的話,數分鐘之內就可以搞定內容型別的雛型。為了知行合一,這裡將逐步探究程式碼的細節,了解它們的原理跟修改方法。
倘若使用預設的顯示方式,則畫面如圖12所示。


▲圖12 型別的顯示範例。

接著,利用paster建立Signup型別,將global_allow選項設定為False(圖13)。


▲圖13 建立Signup型別。

再利用paster addcontent atschema分別建立name和email兩個欄位,用來記錄活動報名者的基本資料。

Signup型別的程式內容會儲存在「content/signup.py」檔案中,部分的程式碼範例如圖14所示


▲圖14 Signup的Schema範例。

為了讓Signup型別能夠在EventFolder裡被新增,必須確認在「mysite/eventfolder/profiles/default/types/Event_Folder.xml」檔案裡,已將allowed_content_types的屬性值,加入Signup的設定值(圖15)。


▲圖15 Event_Folder.xml的allowed_content_types設定範例。

順利的話,從Event Folder項目到新增項目的下拉選單內,會看到Signup的型別,如圖16所示。


▲圖16 Event Folder裡新增Signup的畫面。

如果沒有看到Signup,需要重新啟動Plone,再到Site Setup的Add-on重新啟用,亦即先停用再啟用Event Folder模組。

修改標題欄位

Archetypes預設繼承的型別,通常都會有title和description兩個欄位,如圖17所示。但這兩個欄位對Signup型別而言,並沒有用處,必須進行欄位的調整。


▲圖17 Signup型別的欄位顯示範例。

最簡單的修改方式,是將title改用name的名稱文字,再將description隱藏,調整後的結果,如圖18所示。


▲圖18 Signup型別欄位調整後的範例。

主要的程式碼修改結果如圖19所示。由於name和title都是使用StringField和StringWidget,直接修改title的widget label屬性值,就可以滿足需求。


▲圖19 Signup型別的Schema修改範例。

另外,description的widget有一個visible屬性值,設定為{"edit": "invisible", "view": "invisible"}之後,編輯或顯示型別內容時,就看不到description欄位了。

結語

廣義來看,ZCA只是個方法論,它不必然優於Model-View-Controller(MVC)架構方式,它們都試圖向開發人員推銷一套解題邏輯,有著各自的成本門檻,或是專擅與不足之處,開發人員可以依照自己的需要,使用合適的架構方式或工具。

目前ZCA逐漸開枝散葉,成為幾個新興網站開發架構的基礎,例如Grok和Pyramid都採用ZCA的實作工具,並致力降低上手的門檻,讓開發人員更容易地發揮元件架構帶來的優勢。

藉由深究Archetypes自製型別的過程,我們認識了ZCA的基本原理,它是Plone系統維持擴展彈性的重要基石,舉例來說,interface不僅用於型別的定義,也應用在動態網頁的顯示技巧上。

舊式的Plone動態網頁顯示方式,是搭配portal_skins工具,很容易造成不同Plone Site或模組之間的相互干擾。在後續的內容裡,將介紹動態網頁的相關技巧。


追蹤我們Featrue us

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

我知道了!