在处理基于敏捷的项目时,我需要一种内容类型来支持collective.quickupload,方法是使用IQuickUploadCapable接口进行标记。
我目前正在做的是在我的configure.zcml文件中添加'implements':
`<class class="plone.dexterity.content.Container">
<implements interface="collective.quickupload.browser.interfaces.IQuickUploadCapable" />
</class>`
由于我的内容类型是一个容器,但是我的第一个倾向是使用grok样式方法而不是在ZCML中声明它。什么是告诉我的灵巧内容类型的grok / dexterity方法,它实现了一个额外的接口,还是我应该坚持当前的方法?
此外,我尝试在我的profiles/default/types/my.dexterity.content.xml
文件中添加界面作为行为,但这不起作用(我并不认为它会因为行为有不同的用途)。
答案 0 :(得分:4)
肖恩的回答很好。另一种方法是创建一个行为并应用它。您需要使用以下命令注册行为:
<plone:behavior
title="Quickupload"
provides="collective.quickupload.browser.interfaces.IQuickUploadCapable"
/>
然后,您可以将'collective.quickupload.browser.interfaces.IQuickUploadCapable'添加到FTI中的行为列表中。
您使用的方法并不好,因为它意味着所有基于容器的敏捷类型获得标记接口,而不仅仅是您的类型。
答案 1 :(得分:2)
为什么不在类型界面中的form.Schema之后将IQuickUploadCapable作为mixin子类化?
答案 2 :(得分:1)
您不能将其用作行为,因为它不声称以这种方式使用。
当我从pypi读取时,它旨在用于portlet或viewlet中。
要以grok风格添加它,您应该:
from collective.quickupload.browser.interfaces import IQuickUploadCapable
from plone.directives import form
class IMyContent(form.schema):
grok.implements(IQuickUploadCapable)
就是这样!
确保您的内容类型允许在其中添加文件,因此文件夹既可以添加文件(也可以不限制任何特定的内容类型)。