Plone 使用通用接口标记内容类型的更好方法

Plone 使用通用接口标记内容类型的更好方法,plone,zope,viewlets,Plone,Zope,Viewlets,我想要一个viewlet应用于同一个python中多个内容类型的视图。我一直在做的是通过browser/configure.zcml应用标记界面 <configure xmlns="http://namespaces.zope.org/zope" xmlns:browser="http://namespaces.zope.org/browser" i18n_domain="AnnualProgramModule.content"> <include

我想要一个viewlet应用于同一个python中多个内容类型的视图。我一直在做的是通过browser/configure.zcml应用标记界面

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:browser="http://namespaces.zope.org/browser"
    i18n_domain="AnnualProgramModule.content">

  <include package="plone.app.contentmenu" />

  <class class="..content.programyear.ProgramYear">
    <implements interface=".viewlets.IAnnualProgram" />
  </class>

  <class class="..content.institution.Institution">
    <implements interface=".viewlets.IAnnualProgram" />
  </class>

</configure>

这很有效。但我很想知道是否有更好的方法

不,你所做的实际上是最好的方法。在任何情况下,我都会使用标记接口。:-)

另一种方法是为所有不同内容类型的接口或类重新注册viewlet:



但这要详细得多。

作为替代方案,这也适用于:

我添加了interfaces/annualprogram.py(我使用paster创建了我的产品)。其中我有:

from zope.interface import Interface    

class IAnnualProgram(Interface):
"""A common marker interface for AnnualProgram ContentTypes"""
然后在my institution.py中,我添加了:

from AnnualProgramModule.content.interfaces import IAnnualProgram
.....

class Institution(folder.ATFolder):
    """Institution Profile"""
    implements(IInstitution, IAnnualProgram)
然后,我将同样的方法应用到其他需要iAnualProgramm的内容类型

这是可行的,但并不一定更好

from AnnualProgramModule.content.interfaces import IAnnualProgram
.....

class Institution(folder.ATFolder):
    """Institution Profile"""
    implements(IInstitution, IAnnualProgram)