viewlets

名詞解釋:viewlet,就是頁面上的一個元素,例如edit-bar,這個就算是一個viewlet

plone的將頁面的設計單位拆分到極小化,可以以頁面上的元素為單元做設計,最後再以積木的方式將每個元素做堆疊,這也是plone架構上的獨到之處

一個 viewlet ,就是頁面上的一個小元件,位置可以定義在某個viewlet manager之下,同一個viewlet manager裏面如果有二個以上的viewlet,還可以動態調整位置。

建立一個viewlet,官方建議的方法,是使用grok ,這也是最簡單的方法。

viewlet包含以下二個元素:

  • 一個browser/viewlets.py,
  • 一個pt檔

建立viewlet的注意事項如下:

  • 位置要正確,就是放在browser目錄下,Grok會自已掃描
  • browser目錄要存在 __init__.py 及 configure.zcml,否則系統報錯
  • __init__.py是空的,configure.zcml至少要有表頭,但不用將viewlets.py註冊進

 

viewlets.py的內容範例如下:

#-*- coding:utf-8 -*-
from zope.interface import Interface
from five import grok
from plone.app.layout.viewlets.interfaces import IPortalHeader  #把需要的viewlet manager import進來

#設定viewlet介面、pt檔目錄
grok.context(Interface)
grok.templatedir('viewlet_templates')

class TestViewlet(grok.Viewlet):
    grok.viewletmanager(IPortalHeader)

逐行說明如下:

grok.context(Interface)  # 定義interface
grok.templatedir('viewlet_templates')  #定義pt檔所在目錄,本例的話,目錄會在browser/viewlet_templates

class TestViewlet(grok.Viewlet):     # class 名稱就是 viewlet 的名稱,可以自定
    grok.viewletmanager(IPortalHeader)  # 指定位置,本viewlet要出現在那個viewlet manager

再來就是pt檔了,pt檔比較單純,就是 html + tal 語法,要注意的是

  • 以本例來說,pt檔位置要放在viewlet_templates目錄中,
  • 檔名要與viewlet名稱對應,而且只能用小寫,本例中,pt檔的檔名是 testviewlet.pt

重新buildout,模組重新安裝後,就可以到前台去看效果了