Как я могу использовать слои zope 3 / ztk без наличия слоя кожи zope 2 в Plone 4?


Мы пытаемся разработать наш продукт Plone 4.1, используя только представления ZTK (Zope 3), и поэтому не определили обложку портала. Я пытаюсь переопределить представление из другого пакета и в прошлом использовал атрибут layer для этого.

Plone.тема позволяет отметить запрос с помощью интерфейса "слой" условно на выбранном в данный момент скине. Я хотел бы отметить запросы с интерфейсом "слой", если мой продукт установлен, без создания слоя кожи. Как мне это сделать это?

Мой интерфейс уже определен в zcml

<interface
    interface=".interfaces.IThemeSpecific"
    type="zope.publisher.interfaces.browser.IBrowserSkinType"
    name="My Theme"
/>

И объявлено

from zope.interface import Interface
class IThemeSpecific(Interface):
    """Marker interface for skins part of 'My Theme'
    """
1 3

1 ответ:

Вы должны использовать browserlayer.

Так что, если вам это не нужно для чего-то еще, вы можете удалить объявление интерфейса zcml и оставить только интерфейс python (возможно, вы можете переименовать его в Что-то более конкретное, например IMyPackageLayer). Затем добавьте файл browserlayer.xml в вашем общем профиле установки с этим:

<?xml version="1.0"?>
<!-- Register the package-specific browser layer, so that it will be activated
when this product is installed. -->
<layers>
    <layer name="my.package.browserlayer" 
           interface="my.package.browser.interfaces.IThemeSpecific" />
</layers>

После этого вы можете использовать атрибут layer как всегда:

<browser:page
    name="my-view"
    for="*"
    layer="my.package.browser.interfaces.IThemeSpecific"
    />

Просто не забудьте перезапустить zope и переустановить продукт, чтобы применить новый конфигурация genericsetup.

Вот и все.