2012-02-18 34 views
5

我正在使用Plone 4.1.2,并试图覆盖collective.contenleadimage提供的视图模板。很容易通过portal_view_customization编辑提供的模板,但我想尝试从我的策略产品在文件系统中执行。在Plone中重写另一个产品的视图模板

我想替换c.contentleadimage的folder_leadimage_view。

这就是我在我的政策产品中所做的。

在interfaces.py

from zope.interface import Interface 

class IExamplePolicy(Interface): 
    """Marker interface that defines a Zope 3 browser layer. 
    """ 

在型材/默认/ 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呈现的一个。

我将不胜感激协助。

回答

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,您可以比collective.contentleadimage自己的更改为查看更具体

有关的Zope组件架构界面分辨率为了更多信息,请参阅在the Dexterity manual节“与更多的专用适配器定制”。

+0

谢谢。这很好。我会检查敏捷手册。 – h2o 2012-02-18 08:48:02