Браузер Zope3: страница с несколькими интерфейсами - PullRequest
3 голосов
/ 20 января 2012

Допустим, у меня есть следующий код в моем файле configure.zcml. Я хочу, чтобы мой класс был реализован и для другого интерфейса, скажем, Interface2

<browser:page
        for="Interface1"
        class="plone.app.content.browser.reviewlist.FullReviewListView"
        name="full_review_list"
        template="document_full_review_list.pt"
        permission="cmf.ReviewPortalContent" />

Как мне объявить это в моем файле zcml?

Пока я пробовал следующее:

<browser:page
       for="Interface1 Interface2"
       class="plone.app.content.browser.reviewlist.FullReviewListView"
       name="full_review_list"
       template="document_full_review_list.pt"
       permission="cmf.ReviewPortalContent" />

и

<browser:page
       for="Interface1"
       allowed_interface="Interface2"
       class="plone.app.content.browser.reviewlist.FullReviewListView"
       name="full_review_list"
       template="document_full_review_list.pt"
       permission="cmf.ReviewPortalContent" />

1 Ответ

6 голосов
/ 20 января 2012

Вам придется зарегистрировать его дважды, по одному разу для каждого интерфейса.

Имя может быть одинаковым, без получения ConfigurationConflictError , поскольку обозреватель представляет собой именованный мультиадаптер, который адаптирует оба объекта, предоставляя определенный интерфейс (например, Interface1 или Interface2 ) и запрос.

Таким образом, если интерфейс, который должен предоставлять объект, отличается для каждой регистрации просмотра браузера, то конфликт отсутствует.

<browser:page
        for="Interface1"
        class="plone.app.content.browser.reviewlist.FullReviewListView"
        name="full_review_list"
        template="document_full_review_list.pt"
        permission="cmf.ReviewPortalContent" />

<browser:page
        for="Interface2"
        class="plone.app.content.browser.reviewlist.FullReviewListView"
        name="full_review_list"
        template="document_full_review_list.pt"
        permission="cmf.ReviewPortalContent" />

И наоборот, у вас может быть две регистрации в обозревателе для одного и того же интерфейса объекта (и с одинаковым именем), но с разборчивыми критериями, являющимися интерфейсом, предоставленным запросом.Для этого и нужен атрибут layer .

...