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

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

plone.theme позволяет пометить запрос интерфейсом «layer», зависящим от текущего выбранного скина. Я хотел бы пометить запросы интерфейсом «layer», если мой продукт установлен, без создания слоя скина. Как мне это сделать?

Мой интерфейс уже определен в 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 Ответ

7 голосов
/ 14 сентября 2011

Вы должны использовать браузер .

Итак, если вам это не нужно для чего-то другого, вы можете удалить объявление интерфейса 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.

Вот и все.

...