【问题标题】:Overriding another product's view template in Plone在 Plone 中覆盖另一个产品的视图模板
【发布时间】:2012-03-08 09:00:13
【问题描述】:

我正在使用 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 渲染的模板。

我将不胜感激。

【问题讨论】:

    标签: plone


    【解决方案1】:

    将您的 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 视图比collective.contentleadimage 的视图更具体 .

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

    【讨论】:

    • 谢谢。这运作良好。我会查看敏捷手册。
    猜你喜欢
    • 2019-09-06
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多