在Plone中覆盖另一个产品的视图模板

时间:2012-02-18 01:54:15

标签: 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>
浏览器中的

/ 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渲染的模板。

我很感激你的帮助。

1 个答案:

答案 0 :(得分:8)

将您的interfaces.py更改为:

from collective.contentleadimage.interfaces import ILeadImageSpecific

class IExamplePolicy(ILeadImageSpecific):
    """Marker interface that overrides collective.contentleadimage's
    browser layer.
    """

浏览器图层是应用于请求的标记。我们同时应用了IExamplePolicy和collective.contentleadimage的ILeadImageSpecific浏览器图层,但是通过从ILeadImageSpecific继承您的浏览器图层,您可以使覆盖的folder_leadimage_view视图更具体< / em>而不是collective.contentleadimage自己的。

有关Zope组件体系结构接口解析顺序的详细信息,请参阅the Dexterity manual中的“使用更具体的适配器进行自定义”部分。