Plone 为灵巧模式或XML使用传统接口?

Plone 为灵巧模式或XML使用传统接口?,plone,dexterity,Plone,Dexterity,Plone灵活性支持通过接口(使用zope.schema定义)或通过XML文件定义内容类型模式。首选/推荐的方式是什么 此外:是否有用于定义模式(models/mytype.XML)的XML方言文档 这看起来很接近,但并不完整。我个人更喜欢zope.schema路线;如果我真的愿意,我可以用python动态地改变接口属性,而XML定义当然是静态的 另外,请注意,要根据XML定义的模式注册适配器和视图,您仍然需要将其拉入python代码中: from plone.dexterity import

Plone灵活性支持通过接口(使用zope.schema定义)或通过XML文件定义内容类型模式。首选/推荐的方式是什么

此外:是否有用于定义模式(models/mytype.XML)的XML方言文档


这看起来很接近,但并不完整。

我个人更喜欢zope.schema路线;如果我真的愿意,我可以用python动态地改变接口属性,而XML定义当然是静态的

另外,请注意,要根据XML定义的模式注册适配器和视图,您仍然需要将其拉入python代码中:

from plone.dexterity import api

class IMyXMLDefinedType(api.Schema):
    api.model('my_xml_defined_type.xml')

XML方言是其中的一部分;除了xml模型,我找不到任何文档。

我更喜欢接口。部分原因是我更喜欢Python而不是XML。部分原因是您无法使用XML做某些事情。例如,如果要使用collective.dextertyTextIndexer将字段注册为可搜索字段,则(当前)无法在Plone接口中设置该字段,因此必须使用Python代码和接口。但是Martijn在他的回答中表明,您可以在接口中使用api.model来引用xml文件,因此,如果您真的愿意,这可能是解决问题的一种方法。

我要说的是,没有硬性的答案,这会导致混乱

对于更简单的内容类型,或者在开发更复杂的内容类型的早期,我通常倾向于使用超级模型XML,因为它与Dextrity TTW编辑器的配合非常紧密。它使我能够与客户一起工作,并对他们想要的内容类型提供非常快速的反馈

有时我甚至会进入一些特性的文件系统开发,同时仍然通过超级模型在FTI中定义字段

然而,对于更复杂的内容类型,你几乎肯定会遇到一些单靠超级模特无法做到的事情。在这一点上,我通常会转换为模式——这通常很容易做到


理想情况下,如果你正在进行大量的灵巧训练,你应该能够很容易地来回移动。它们只是表示相同对象和属性的不同方式。

它不能替代完整的文档,但请查看plone.supermodel中的fields.txt文件。它读起来就像一个参考,展示了SupermodelXML如何等效所有内置字段类型的模式属性。