Reputation: 513
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.
Upvotes: 5
Views: 802
Reputation: 1782
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.
Upvotes: 8