Plone架构扩展器和自定义内容类型

时间:2014-08-27 18:52:09

标签: plone ploneformgen

是否可以使用原始类型的架构创建任何自定义内容类型也接受的内容类型的扩展程序(只添加几个新字段)?

我正在研究PloneFormGen的新功能。我原本打算分叉并修改核心产品,但认为创建一个扩展PFG的单独附加组件会更容易接受。所以,我开始创建我的extender.py和所有必要的位来扩展PloneFormGen表单文件夹。

但是,我们公司的自定义内容类型是表单文件夹的扩展名。这让我思考而不是只考虑标准的表单文件夹,我可以使用表单文件夹作为基础来考虑所有类型,或者提供一个控制面板,网站管理员可以指定扩展器应用的类型吗?

或者,是否有更好的方法来创建我们的自定义类型,因此它不仅可以抓取核心架构,还可以获取它的任何扩展器?

为了更详细地解释我要添加的内容,它不是字段或动作适配器。基本上,它是一个名为Skip Logic的新功能。它提供了使用jQuery基于其他现场值隐藏/显示字段的功能。与为每个表单创建自定义JS覆盖相反,这允许内容编辑器或构建表单的任何人在没有代码的情况下控制此功能。有一个加载的JS文件,它使用JSON字符串来确定隐藏/显示功能。我创建了一个表单模板,可以用来管理它,它可以提供所有可用的表单字段供选择。

我的实施想法是在PFG表单中添加两个新的目录索引。一个是布尔值,用于切换跳过逻辑启用/禁用。另一个是保存JSON字符串的字符串,它是使用表单UI创建的(想象一下类似于QuickEdit的新选项卡)。

如果有人有更好的解决方案,我会全力以赴。无论是修改核心产品,还是扩展它,都是我能想到的唯一两个。

1 个答案:

答案 0 :(得分:1)

SchemaExtenders适应接口而不是类本身,因此对于简单的“扩展FormFolder”示例,您不需要做任何特殊的事情。你甚至可以适应一个没有做任何有用的标记接口,并让类“外部”实现该接口(这里只摘录本地代码):

class IIllustratableContent(Interface):
    """This content has an image reference it sometimes might use"""

class IllustratableExtender(object):
    adapts(IIllustratableContent)
    implements(
        ISchemaExtender,
        IBrowserLayerAwareExtender,
        )

    # do stuff

configure.zcml

  <adapter
     name="illustratedContent"
     factory=".illustratedContent.IllustratableExtender"
     provides="archetypes.schemaextender.interfaces.ISchemaExtender"
     />

  <five:implements
     class="Products.ATContentTypes.content.document.ATDocument"
     interface=".illustratedContent.IIllustratableContent"
     /> <!-- and for some other classes, too -->