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

发布于 2025-01-06 14:09:21 字数 1979 浏览 5 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雨落□心尘 2025-01-13 14:09:21

将您的 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 组件架构接口解析顺序的更多信息,请参阅 Dexterity 手册

Change your interfaces.py to:

from collective.contentleadimage.interfaces import ILeadImageSpecific

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

Browser layers are markers applied to the request. Both your IExamplePolicy and collective.contentleadimage's ILeadImageSpecific browser layers are applied, but by inheriting from ILeadImageSpecific for your browser layer you make your overridden folder_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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文