我们正在尝试仅使用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)
您必须使用浏览器.
因此,如果您不需要其他内容,则可以删除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配置.
就这样.