如何在 Plone 上扩展扩展内容类型
How to extend an extended content type on Plone
我正在研究插件及其模式扩展器、接口、适配器、提供程序...但我找不到如何扩展扩展模式。我会更好地解释我的情况:
我有三个插件:L、H 和 V,其中 L 是“基础”插件。所以 H 取决于 L 的内容类型,因为它是 L 的扩展。内容扩展是使用 archetypes.schemaextender 包制作的。
现在想实现V,应该是H的扩展,实现如下结构:
L → H → V
插件“L”:
此插件的内容类型定义为 class Batch(ATFolder)。这个插件也有自己的模式和它们的接口标记 IcontentA。
batch.py
class Batch(ATFolder):
implements(IBatch)
schema =....
interfaces.py
class IBatch(Interfaces)
插件“H”
此插件从 L 获取内容 class 并对其进行扩展
batch.py
from archetypes.schemaextender.interfaces import IOrderableSchemaExtender
class BatchSchemaExtender(Object):
adapts(IBatch)
implements(IOrderableSchemaExtender)
configure.zcml
<adapter factory=".batch.BatchSchemaExtender " />
好的,现在我想用另一个插件扩展内容的架构。我做了类似的事情:
插件“L”:
batch.py
class Batch(ATFolder):
implements(IBatch)
schema =....
interfaces.py
class IBatch(Interfaces)
插件“H”
batch.py
from archetypes.schemaextender.interfaces import IOrderableSchemaExtender
class BatchSchemaExtender(Object):
adapts(IBatch)
implements(IOrderableSchemaExtender, IBatchH)
configure.zcml
<adapter factory=".batch.BatchSchemaExtender”
provides=”archetypes.schemaextender.interfaces.IOrderableSchemaExtender" />
interfaces.py
class IBatchH(Interface)
插件“V”:
batch.py
from archetypes.schemaextender.interfaces import IOrderableSchemaExtender
class BatchV(Object):
adapts(IBatchH)
implements(IOrderableSchemaExtender, IbatchV)
interfaces.py
class IBatchV(Interface)
configure.zcml
<adapter
for="L.interfaces.IBatch"
provides="archetypes.schemaextender.interfaces.IOrderableSchemaExtender"
factory=".batch.BatchV"
/>
如您所料,它不起作用...但我不知道是否可以扩展扩展 class。
我必须指出,每个 class 都有自己的 init
、getFields
和 getOrder
函数。
如果我更改 V 插件上的 adapts 定义,我会收到错误消息。 V 插件中的每个函数都有一个 `pdb.set_trace() 定义,但实例不会停止...
已编辑:
我在 this mail 中发现:“你不能覆盖覆盖。你唯一的希望可能是 z3c.unconfigure:
为单一内容类型注册多个模式扩展程序应该会按预期工作;我认为你在 V 中的注册不正确。
在 V 中,你说的地方
<adapter
for="L.interfaces.IBatch"
provides="archetypes.schemaextender.interfaces.IOrderableSchemaExtender"
factory=".batch.BatchV"
/>
对应的class有一行:
适应(IBatchH)。
这可能是
adapts(L.interfaces.IBatch)
如果Plone启动时有任何配置冲突,那么你需要在附加注册中添加一个name="something_unique"来消除冲突。
我正在研究插件及其模式扩展器、接口、适配器、提供程序...但我找不到如何扩展扩展模式。我会更好地解释我的情况:
我有三个插件:L、H 和 V,其中 L 是“基础”插件。所以 H 取决于 L 的内容类型,因为它是 L 的扩展。内容扩展是使用 archetypes.schemaextender 包制作的。
现在想实现V,应该是H的扩展,实现如下结构:
L → H → V
插件“L”:
此插件的内容类型定义为 class Batch(ATFolder)。这个插件也有自己的模式和它们的接口标记 IcontentA。
batch.py
class Batch(ATFolder):
implements(IBatch)
schema =....
interfaces.py
class IBatch(Interfaces)
插件“H”
此插件从 L 获取内容 class 并对其进行扩展
batch.py
from archetypes.schemaextender.interfaces import IOrderableSchemaExtender
class BatchSchemaExtender(Object):
adapts(IBatch)
implements(IOrderableSchemaExtender)
configure.zcml
<adapter factory=".batch.BatchSchemaExtender " />
好的,现在我想用另一个插件扩展内容的架构。我做了类似的事情:
插件“L”:
batch.py
class Batch(ATFolder):
implements(IBatch)
schema =....
interfaces.py
class IBatch(Interfaces)
插件“H”
batch.py
from archetypes.schemaextender.interfaces import IOrderableSchemaExtender
class BatchSchemaExtender(Object):
adapts(IBatch)
implements(IOrderableSchemaExtender, IBatchH)
configure.zcml
<adapter factory=".batch.BatchSchemaExtender”
provides=”archetypes.schemaextender.interfaces.IOrderableSchemaExtender" />
interfaces.py
class IBatchH(Interface)
插件“V”:
batch.py
from archetypes.schemaextender.interfaces import IOrderableSchemaExtender
class BatchV(Object):
adapts(IBatchH)
implements(IOrderableSchemaExtender, IbatchV)
interfaces.py
class IBatchV(Interface)
configure.zcml
<adapter
for="L.interfaces.IBatch"
provides="archetypes.schemaextender.interfaces.IOrderableSchemaExtender"
factory=".batch.BatchV"
/>
如您所料,它不起作用...但我不知道是否可以扩展扩展 class。
我必须指出,每个 class 都有自己的 init
、getFields
和 getOrder
函数。
如果我更改 V 插件上的 adapts 定义,我会收到错误消息。 V 插件中的每个函数都有一个 `pdb.set_trace() 定义,但实例不会停止...
已编辑: 我在 this mail 中发现:“你不能覆盖覆盖。你唯一的希望可能是 z3c.unconfigure:
为单一内容类型注册多个模式扩展程序应该会按预期工作;我认为你在 V 中的注册不正确。
在 V 中,你说的地方
<adapter
for="L.interfaces.IBatch"
provides="archetypes.schemaextender.interfaces.IOrderableSchemaExtender"
factory=".batch.BatchV"
/>
对应的class有一行:
适应(IBatchH)。
这可能是
adapts(L.interfaces.IBatch)
如果Plone启动时有任何配置冲突,那么你需要在附加注册中添加一个name="something_unique"来消除冲突。