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

问题描述 投票:0回答:1

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

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

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

或者,有没有更好的方法来创建我们的自定义类型,因此它不仅抓住核心架构,而且还有它的任何扩展器?

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

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

如果有人有更好的解决方案如何实施,我很满意。无论是修改核心产品,还是扩展它,都是我能想到的唯一两个。

plone ploneformgen
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 -->
© www.soinside.com 2019 - 2024. All rights reserved.