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

sca*_*a05 3 zope plone

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

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

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

<interface
    interface=".interfaces.IThemeSpecific"
    type="zope.publisher.interfaces.browser.IBrowserSkinType"
    name="My Theme"
/>
Run Code Online (Sandbox Code Playgroud)

并宣布

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

Gia*_*oli 7

您必须使用浏览器.

因此,如果您不需要其他内容,则可以删除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>
Run Code Online (Sandbox Code Playgroud)

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

<browser:page
    name="my-view"
    for="*"
    layer="my.package.browser.interfaces.IThemeSpecific"
    />
Run Code Online (Sandbox Code Playgroud)

只需记住重新启动zope并重新安装产品即可应用新的genericsetup配置.

就这样.