0

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

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

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

或者,有没有更好的方法来创建我们的自定义类型,这样它不仅可以获取核心模式,还可以获取任何扩展器?

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

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

如果有人对如何实施有更好的解决方案,我会全力以赴。要么修改核心产品,要么扩展它是我唯一能想到的两个。

4

1 回答 1

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 -->
于 2014-08-28T05:24:33.757 回答