我们正在尝试仅使用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'
"""
答案 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配置。
这就是全部。