直到現在我們也只是在提高留言薄的性能,而對它的使用者介面並沒做太多的改善。 實際上,我們一直用 ZMI 來進行所有的留言薄管理,這對最終使用者來說是完全不適合的。 因此本章將專注于開發一個皮膚以便為留言薄實現使用者介面,就象我們所看到的現實中的留言薄應用程式。 儘管該包需要一點 Python 開發,但我認為這對於我們兩個內容元件部分都可以說是個好的任務。
皮膚(等同于 Zope 2 中的 CMF)是一個用來實現對一個已存在的視圖自訂介面的方法。 這非常類似于 HTML 和 CSS(層級式樣式表),對於 HTML 代碼來說視圖(頁面範本,視圖類)和樣式表(CSS)就相當於在 HTML 結構元素上的皮膚。 然而皮膚之下是有另一個抽象層的。
皮膚實際上是個層的堆疊。 每一個層都包含了一些視圖和資源。 這樣就可以讓特定的視圖和資源失效。 舉個例子,我們的樣式表(CSS)也許定義在缺省層。 然而,該樣式表對於我們的需要來講實在是太簡單、太不適合了。 所以我們可以創建一個新的層 board 並將一個新的樣式表放在那裡。 當完成之後,我們定義一介在在缺省層後 board 層的皮膚,然後所有新的樣式定義就會生效。
步驟 I: 準備
在我們創建新皮膚之前,我們需要做些準備。 為了不同原來的視圖和資源混淆,我們在 messageboard/browser 目錄中創建一個名為 skin 的包;不要忘記生成 `init.py` 檔。 然後創建一個空的 configure.zcml 檔:
1&HTTP://www.aliyun.com/zixun/aggregation/37954.html">nbsp; <configure
2 xmlns="HTTP://namespaces.zope.org/browser">
3
4 </configure>
現在用下面的語句將該配置導入到瀏覽器的 configure.zcml 中:
1 <include package=".skin" />
步驟 II: 創建一個新的皮膚
創建一個新的皮膚是非常容易的,用 ZCML 配置語句就可以完全實現。 瀏覽器名字空間有個叫 skin 語句就可以讓我們完成,因此添加下列語句到 skin 包的設定檔中:
1 <layer name="board"/>
2
3 <skin name="board" layers="board rotterdam default" />
第一個語句創建一個新的層,在那裡我們將放入所有的新範本並生成唯一的皮膚。 第二個語句創建一個名為 board 的皮膚,由三個元素層堆疊組成。 最底的層是缺省層,被 rotterdam 覆蓋,而它又被 board 覆蓋。
你也許奇怪為什麼 rotterdam 層會放在這裡。 rotterdam 層包含一些比較好的定義,象 favicon 和其他一些對我們也很有用的視圖代碼。 除此之外,我們不會經常使用這個層。