在 Plone 中覆盖另一个产品的视图模板
我正在使用 Plone 4.1.2,并且尝试覆盖 Collective.contenleadimage 提供的视图模板。通过 Portal_view_customization 编辑提供的模板很容易,但我想尝试从文件系统中的策略产品中进行编辑。
我想替换c.contentleadimage的folder_leadimage_view。
这就是我在我的保单产品中所做的。
在interfaces.py中
from zope.interface import Interface
class IExamplePolicy(Interface):
"""Marker interface that defines a Zope 3 browser layer.
"""
在profiles/default/browserlayer.xml
<?xml version="1.0"?>
<layers>
<layer name="example.policy"
interface="example.policy.interfaces.IExamplePolicy" />
</layers>
在browser/configure.zcml
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:zcml="http://namespaces.zope.org/zcml"
i18n_domain="example.policy">
<browser:page
for="Products.Archetypes.interfaces.IBaseFolder"
name="folder_leadimage_view"
class="collective.contentleadimage.browser.folder_leadimage_view.FolderLeadImageView"
template="folder_leadimage_view.pt"
layer="..interfaces.IExamplePolicy"
permission="zope2.View"
allowed_attributes="tag"
/>
<browser:page
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
name="folder_leadimage_view"
class="collective.contentleadimage.browser.folder_leadimage_view.FolderLeadImageView"
template="folder_leadimage_view.pt"
layer="..interfaces.IExamplePolicy"
permission="zope2.View"
/>
我的保单产品安装正常,我可以在 Portal_view_customization 中看到
Products.Archetypes.interfaces.base.IBaseFolder
folder_leadimage_view (example.policy.interfaces.IExamplePolicy)
folder_leadimage_view (collective.contentleadimage.interfaces.ILeadImageSpecific)
但是,我的新模板不是由 Plone 呈现的模板。
我将不胜感激您的帮助。
I am using Plone 4.1.2 and I am trying to override a view template provided by collective.contenleadimage. It is easy to edit the provided template via portal_view_customization but I want to try doing it from my policy product in the filesystem.
I would like to replace the folder_leadimage_view of c.contentleadimage.
This is what I have done in my policy product.
in interfaces.py
from zope.interface import Interface
class IExamplePolicy(Interface):
"""Marker interface that defines a Zope 3 browser layer.
"""
in profiles/default/browserlayer.xml
<?xml version="1.0"?>
<layers>
<layer name="example.policy"
interface="example.policy.interfaces.IExamplePolicy" />
</layers>
in browser/configure.zcml
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:zcml="http://namespaces.zope.org/zcml"
i18n_domain="example.policy">
<browser:page
for="Products.Archetypes.interfaces.IBaseFolder"
name="folder_leadimage_view"
class="collective.contentleadimage.browser.folder_leadimage_view.FolderLeadImageView"
template="folder_leadimage_view.pt"
layer="..interfaces.IExamplePolicy"
permission="zope2.View"
allowed_attributes="tag"
/>
<browser:page
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
name="folder_leadimage_view"
class="collective.contentleadimage.browser.folder_leadimage_view.FolderLeadImageView"
template="folder_leadimage_view.pt"
layer="..interfaces.IExamplePolicy"
permission="zope2.View"
/>
My policy product installs fine and I can see in portal_view_customization
Products.Archetypes.interfaces.base.IBaseFolder
folder_leadimage_view (example.policy.interfaces.IExamplePolicy)
folder_leadimage_view (collective.contentleadimage.interfaces.ILeadImageSpecific)
However, my new template is not the one rendered by Plone.
I would appreciate the assistance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
将您的
interfaces.py
更改为:浏览器层是应用于请求的标记。您的
IExamplePolicy
和 Collective.contentleadimage 的ILeadImageSpecific
浏览器层均已应用,但通过从浏览器层的ILeadImageSpecific
继承,您可以覆盖folder_leadimage_view
视图比collective.contentleadimage 自己的视图更具体。有关 Zope 组件架构接口解析顺序的更多信息,请参阅 Dexterity 手册。
Change your
interfaces.py
to:Browser layers are markers applied to the request. Both your
IExamplePolicy
and collective.contentleadimage'sILeadImageSpecific
browser layers are applied, but by inheriting fromILeadImageSpecific
for your browser layer you make your overriddenfolder_leadimage_view
view more specific than collective.contentleadimage's own.For more information on Zope Component Architecture interface resolution order see the "Customisation with more-specific adapters" section in the Dexterity manual.