Переопределение шаблона представления другого продукта в Plone - PullRequest
5 голосов
/ 18 февраля 2012

Я использую Plone 4.1.2, и я пытаюсь переопределить шаблон представления, предоставленный colle.contenleadimage. Предоставленный шаблон легко отредактировать с помощью portal_view_customization, но я хочу попробовать сделать это из моего продукта политики в файловой системе.

Я хотел бы заменить folder_leadimage_view c.contentleadimage.

Это то, что я сделал в моем программном продукте.

в interfaces.py

from zope.interface import Interface

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

в профилях / 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 Ответ

8 голосов
/ 18 февраля 2012

Измените interfaces.py на:

from collective.contentleadimage.interfaces import ILeadImageSpecific

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

Слои браузера - это маркеры, применяемые к запросу. Применяются как слои вашего браузера IExamplePolicy, так и коллективного ILeadImageSpecific *, но наследуя ILeadImageSpecific для слоя браузера, вы делаете переопределенный folder_leadimage_view вид более конкретным , чем собственный.

Для получения дополнительной информации о архитектуре компонентов Zope порядок разрешения интерфейса см. Раздел «Настройка с использованием более специфичных адаптеров» в в руководстве по ловкости .

...