Plone 使用通用接口标记内容类型的更好方法
我想要一个viewlet应用于同一个python中多个内容类型的视图。我一直在做的是通过browser/configure.zcml应用标记界面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
<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)