Skip to content. | Skip to navigation

Personal tools


You are here: Home / Tips / 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 的相互影響

no layer attribute makes it implicit using the zope.publisher.interfaces.browser.IDefaultBrowserLayer

Related content
View Component