Как я могу использовать слои 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 ответ:
Вы должны использовать 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.
Вот и все.