Layers
View 在註冊階段,可以搭配一個 layer 設定值,想要依照 Theme 或 Device 狀態,來啟用或停用 View 時,利用 Layer 可以事半功倍。由於 Zope 預設可以服務數個 Plone 網站,這個方案,能讓 Python 程式碼知道該在哪個 Plone 網站裡生效執行。
Layer 是加在 HTTPRequest 物件上的 Market Interface,經常搭配 ZCML 註冊方式,達到動態啟用 View 的效果。
Layer 是 Location Unaware
browser:resource 改成 browserview 範例: collective.embedly
Getting Zope3 Browser Layer Interface Name
>>> from zope.component import getUtility >>> from zope.publisher.interfaces.browser import IBrowserSkinType >>> getUtility(IBrowserSkinType, name="Old Plone 3 Custom Theme") <InterfaceClass plonetheme.classic.browser.interfaces.IThemeSpecific>
Views that are not registered for any browser layer get implictly registered for IDefaultBrowserLayer.
can't have both the browserlayer.xml and registry.xml in the same add-on
Override View Class 尚未搞懂 IDefaultPloneLayer 與 IDefaultBrowserLayer 差別 plone.browserlayer bobtemplates.plone 使用 IBrowserLayer 當預設值
from plone.theme.interface import IDefaultPloneLayer class IPloneInvitePolicy(IDefaultPloneLayer): """ A marker interface for the theme layer """
Testing Code 如果執行移除的測試,要留意 Uninstall 與 Interface 的相互影響。