gpt4 book ai didi

python - 如何在 Plone 上扩展扩展内容类型

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:28 24 4
gpt4 key购买 nike

我正在研究插件及其模式扩展器、接口(interface)、适配器、提供程序……但我找不到如何扩展扩展模式。我会更好地解释我的情况:

我有三个插件:L、H 和 V,其中 L 是“基础”插件。所以 H 依赖于 L 的内容类型,因为它是 L 的扩展。内容扩展是使用 archetypes.schemaextender 包制作的。

现在要实现V,应该是H的扩展,实现如下结构:

长→高→高

插件“L”:

此插件的内容类型定义为 class Batch(ATFolder)。这个插件也有自己的模式和它们的接口(interface)标记 IcontentA。

批处理.py

class Batch(ATFolder):
implements(IBatch)
schema =....

接口(interface).py

class IBatch(Interfaces)

插件“H”

这个插件从 L 获取内容类并扩展它

批处理.py

from archetypes.schemaextender.interfaces import IOrderableSchemaExtender

class BatchSchemaExtender(Object):
adapts(IBatch)
implements(IOrderableSchemaExtender)

配置.zcml

<adapter factory=".batch.BatchSchemaExtender " />

好的,现在我想用另一个插件扩展内容的架构。我做了类似的事情:

插件“L”:

批处理.py

class Batch(ATFolder):
implements(IBatch)
schema =....

接口(interface).py

class IBatch(Interfaces)    

插件“H”

批处理.py

from archetypes.schemaextender.interfaces import IOrderableSchemaExtender

class BatchSchemaExtender(Object):
adapts(IBatch)
implements(IOrderableSchemaExtender, IBatchH)

配置.zcml

<adapter factory=".batch.BatchSchemaExtender”
provides=”archetypes.schemaextender.interfaces.IOrderableSchemaExtender" />

接口(interface).py

class IBatchH(Interface)

插件“V”:

批处理.py

from archetypes.schemaextender.interfaces import IOrderableSchemaExtender

class BatchV(Object):
adapts(IBatchH)
implements(IOrderableSchemaExtender, IbatchV)

接口(interface).py

class IBatchV(Interface)

配置.zcml

<adapter
for="L.interfaces.IBatch"
provides="archetypes.schemaextender.interfaces.IOrderableSchemaExtender"
factory=".batch.BatchV"
/>

如您所料,它不起作用...但我不知道是否可以扩展扩展类。我必须指出,每个类都有自己的 initgetFieldsgetOrder 函数。如果我更改 V 插件上的 adapts 定义,我会收到错误消息。 V 插件中的每个函数都有一个 `pdb.set_trace() 定义,但实例不会停止...

编辑:我在 this mail 中找到: "你不能覆盖一个覆盖。你唯一的希望可能是 z3c.unconfigure:

http://pypi.python.org/pypi/z3c.unconfigure"

最佳答案

为单一内容类型注册多个模式扩展器应该会按预期工作;我认为您在 V 中的注册不正确。

在 V 中,你说的地方

<adapter
for="L.interfaces.IBatch"
provides="archetypes.schemaextender.interfaces.IOrderableSchemaExtender"
factory=".batch.BatchV"
/>

对应的类有一行:

适应(IBatchH)。

这可能是

adapts(L.interfaces.IBatch)

如果 Plone 启动时有任何配置冲突,那么你需要在附加注册中添加一个 name="something_unique"来消除冲突。

关于python - 如何在 Plone 上扩展扩展内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29770366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com