如何在Plone 4中没有zope 2皮肤层的情况下使用zope 3 / ztk图层?

时间:2011-09-14 10:04:01

标签: plone zope

我们正在尝试仅使用ZTK(Zope 3)视图开发我们的Plone 4.1产品,因此没有定义门户皮肤。我正在尝试覆盖不同包中的视图,并且过去使用了layer属性来执行此操作。

plone.theme允许您使用“图层”界面标记请求,条件是当前选定的皮肤。如果我的产品已安装,我想用“图层”界面标记请求,而不创建外观图层。我该怎么做?

我已经在zcml中定义了我的界面

<interface
    interface=".interfaces.IThemeSpecific"
    type="zope.publisher.interfaces.browser.IBrowserSkinType"
    name="My Theme"
/>

并宣布

from zope.interface import Interface
class IThemeSpecific(Interface):
    """Marker interface for skins part of 'My Theme'
    """

1 个答案:

答案 0 :(得分:7)

您必须使用browserlayer

因此,如果您不需要其他内容,则可以删除zcml接口声明并仅保留python接口(也许您可以将其重命名为更具体的内容,如IMyPackageLayer)。然后在您的通用设置配置文件中添加一个文件browserlayer.xml:

<?xml version="1.0"?>
<!-- Register the package-specific browser layer, so that it will be activated
when this product is installed. -->
<layers>
    <layer name="my.package.browserlayer" 
           interface="my.package.browser.interfaces.IThemeSpecific" />
</layers>

之后,您可以像往常一样使用图层属性:

<browser:page
    name="my-view"
    for="*"
    layer="my.package.browser.interfaces.IThemeSpecific"
    />

请记住重新启动zope并重新安装产品以应用新的genericsetup配置。

这就是全部。