Plone 使用新界面标记灵巧内容类型的推荐方法

Plone 使用新界面标记灵巧内容类型的推荐方法,plone,dexterity,Plone,Dexterity,在处理一个基于灵巧性的项目时,我需要我的一个内容类型来支持collective.quickupload,方法是使用iquickuploadable界面标记它 我目前正在向configure.zcml文件添加一个“implements”: `<class class="plone.dexterity.content.Container"> <implements interface="collective.quickupload.browser.interf

在处理一个基于灵巧性的项目时,我需要我的一个内容类型来支持collective.quickupload,方法是使用iquickuploadable界面标记它

我目前正在向configure.zcml文件添加一个“implements”:

`<class class="plone.dexterity.content.Container">      
     <implements interface="collective.quickupload.browser.interfaces.IQuickUploadCapable" />
 </class>`
`
`
由于我的内容类型是一个容器,所以我的第一个倾向是使用grok风格的方法,而不是在ZCML中声明它。什么是grok/Dextrity方法来告诉我的Dextrity内容类型它实现了一个额外的接口,或者我应该坚持当前的方法


此外,我还尝试在我的
profiles/default/types/my.dexterity.content.xml
文件中将接口作为行为添加,但这不起作用(我真的不希望它作为行为起到不同的作用)。

您不能将其作为行为使用,因为它并不声称以那种方式使用

正如我从中读到的,它打算在portlet或viewlet中使用

要以grok样式添加它,您应该:

from collective.quickupload.browser.interfaces import IQuickUploadCapable
from plone.directives import form
class IMyContent(form.schema):
    grok.implements(IQuickUploadCapable)
就这样


请确保您的内容类型允许在其中添加文件,folderish和它都允许添加文件(或者不限于任何特定的内容类型)。

为什么不在您的类型界面中将iquickuploadable子类作为form.Schema后的mixin?

Sean的答案很好。另一种方法是创造一种行为并加以应用。您需要向以下人员注册该行为:

<plone:behavior
    title="Quickupload"
    provides="collective.quickupload.browser.interfaces.IQuickUploadCapable"
    />

然后,您可以将“collective.quickupload.browser.interfaces.iquickuploadable”添加到FTI中的行为列表中


您使用的方法不好,因为这意味着所有基于容器的敏捷类型都会得到标记接口,而不仅仅是您的类型。

我假设
grok.implements(iquickuploadable IOtherInterface)
会起作用吗?不,不会:
grok.implements(iquickuploadable,IOtherInterface)
会起作用。注意分隔接口的逗号。我在我的类上尝试了grok.implements(iquickuploadable)。它不起作用。请注意,我非常确定上面的
form.schema
应该是
form.schema
底线,它不起作用,我得到:
InvalidInterface:Concrete属性,\uuu实现\u advice\u data\uuuu
@DavidBain:注意:您当前的方法将标记所有敏捷容器项为提供此标记,而不仅仅是您的类型。