アドオンとそのスキーマ エクステンダー、インターフェイス、アダプター、プロバイダーについて調査していましたが、拡張スキーマを拡張する方法がわかりません。私は自分の状況をよりよく説明します:
L、H、V の 3 つのアドオンがあります。ここで、L は「ベース」アドオンです。つまり、H は L の拡張であるため、L のコンテンツ タイプに依存します。コンテンツ拡張は、archetypes.schemaextender パッケージを使用して作成されました。
V を実装したいのですが、次の構造を実現するには H を拡張する必要があります。
L → H → V
アドオン「L」:
このアドオンには、クラス Batch(ATFolder) として定義されたコンテンツ タイプがあります。このアドオンには、独自のスキーマとそのインターフェイス マーカー IcontentA もあります。
バッチ.py
class Batch(ATFolder):
implements(IBatch)
schema =....
インターフェイス.py
class IBatch(Interfaces)
アドオン「H」</h2>
このアドオンは、L からコンテンツ クラスを取得し、それを拡張します。
バッチ.py
from archetypes.schemaextender.interfaces import IOrderableSchemaExtender
class BatchSchemaExtender(Object):
adapts(IBatch)
implements(IOrderableSchemaExtender)
configure.zcml
<adapter factory=".batch.BatchSchemaExtender " />
さて、コンテンツのスキーマを別のアドオンで拡張したいと思います。私は次のようなことをしました:
アドオン「L」:
バッチ.py
class Batch(ATFolder):
implements(IBatch)
schema =....
インターフェイス.py
class IBatch(Interfaces)
アドオン「H」</h2>
バッチ.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" />
インターフェイス.py
class IBatchH(Interface)
アドオン「V」:
バッチ.py
from archetypes.schemaextender.interfaces import IOrderableSchemaExtender
class BatchV(Object):
adapts(IBatchH)
implements(IOrderableSchemaExtender, IbatchV)
インターフェイス.py
class IBatchV(Interface)
configure.zcml
<adapter
for="L.interfaces.IBatch"
provides="archetypes.schemaextender.interfaces.IOrderableSchemaExtender"
factory=".batch.BatchV"
/>
ご想像のとおり、うまくいきません...しかし、拡張クラスを拡張できるかどうかはわかりません。各クラスには独自のinit
,getFields
およびgetOrder
関数があることに注意する必要があります。V アドオンのadapts 定義を変更すると、エラーが発生します。V アドオン内の各関数には `pdb.set_trace() 定義がありますが、インスタンスは停止しません...
編集: 私はこのメールを見つけました: