【问题标题】:Zope3 browser:page multiple interfacesZope3浏览器:分页多个界面
【发布时间】:2012-01-20 12:12:58
【问题描述】:

假设我的 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" />

【问题讨论】:

    标签: interface zope zope3 zcml


    【解决方案1】:

    您必须注册两次,每个接口一次。

    名称可以相同,而不会出现 ConfigurationConflictError,因为浏览器视图是一个命名的多适配器,它适应提供特定接口的对象(即 Interface1Interface2) 和请求。

    所以如果每个browserview注册该对象应该提供的接口不同,那么就没有冲突。

    <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 属性的用途。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-04
      • 2011-08-09
      • 1970-01-01
      • 2015-09-01
      • 2014-01-17
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      相关资源
      最近更新 更多