Plone Dexterity支持通过接口(使用zope.schema定义)或通过XML文件定义内容类型模式。什么是首选/推荐方式?
另外:是否有用于定义模式的XML方言文档(models / mytype.xml)?
此presentation似乎接近但未完整。
答案 0 :(得分:2)
我个人更喜欢zope.schema路线;我可以,如果我真的想,用python动态地改变接口属性,而XML定义当然是静态的。
另外,请注意,要根据XML定义的模式注册适配器和视图,无论如何都需要将其拉入python代码:
from plone.dexterity import api
class IMyXMLDefinedType(api.Schema):
api.model('my_xml_defined_type.xml')
XML方言是plone.supermodel
package的一部分;我无法在source code之外找到任何文档。
答案 1 :(得分:0)
我更喜欢xml模型上的界面。部分原因是因为我更喜欢Python而不是XML。部分原因是因为你不能用XML做一些事情。例如,如果要将字段注册为可搜索的,使用collective.dexteritytextindexer,您(当前)无法在Plone界面中设置此项,因此您必须使用Python代码,因此必须使用接口。但是Martijn在他的回答中表明你可以在一个接口中使用api.model来引用一个xml文件,所以如果你真的想这样可能会解决这个问题。
答案 2 :(得分:0)
我将通过说没有硬性和快速的答案来为这场混乱做出贡献。
对于更简单的内容类型,或者在开发更复杂的内容类型的早期,我经常面向超级模型XML,因为它与灵巧的TTW编辑器的工作方式有多紧密。它允许我与客户合作,对他们的内容类型提供非常快速的反馈。
有时我甚至会进入某些功能的文件系统开发,同时仍然通过超级模型在FTI中定义字段。
然而,对于更复杂的内容类型,你几乎肯定会单独通过超级模特去做一些你无法做到的事情。那时,我通常会转换为架构 - 这通常很容易做到。
理想情况下,如果你正在进行大量的灵活性开发,你应该可以很容易地来回移动。它们只是表示相同对象和属性的不同方式。