registerSomething(myClass)
を作成せずに、純粋にZCMLまたはgrokの方法で、Plone 4のビューと名前付きアダプタのレジストリを保持する方法を探します。Plone 4でレジストリ/レジストリのビュー/アダプタを収集する簡単な方法は?
たとえば、主な製品がある場合、特定の性質を持つすべての名前付き(マルチ)アダプタのボキャブラリが必要です。製品にはいくつかのアダプターが用意されていますが、他のアダプターは他の製品(第三者)から提供されている可能性があります。
明白な方法は、ページモデル(registerArticleModel(MyPageModel)
)を追跡するためのPloneArticleのような何らかのレジストリを作成することですが、私はよりクリーンな方法があることを願っています。
質問は、レジストリの効果を達成するために純粋にZCML/grokの方法ですか?このようにして、第三者の製品がそれ自身のアダプタを利用できるようになると、「レジストリ」はそれを自動的に取り出してボキャブラリに表示します。たとえば、特定のシグネチャを持つすべてのアダプタのコンポーネントシステムにクエリを実行します。
もちろん、「レジストリ」は永続的であってはいけません。アダプター/ビューが欠落している場合、主製品はフォールバックを使用します。
パフォーマンスは問題ありませんが、ボキャブラリをコンパイルするためのすべてのアダプタを使用した線形検索は許容できません。テンプレートで
<browser:page
name="content-item-plain"
for="*"
class=".content_item.ContentItem"
permission="zope2.View"
layer="my.model.browser.interfaces.IMyModelLayer"
template="templates/content_item_plain.pt"
/>
<browser:page
name="content-item-another"
for="*"
class=".content_item.ContentItem"
permission="zope2.View"
layer="my.model.browser.interfaces.IMyModelLayer"
template="templates/content_item_another.pt"
/>
...
:
UPDATE: が、これはより具体的にするために、ビューの次のユースケースを考える
コンテキストがほとんどである<-- config/layout may contain '@@content-item-another' or '@@content-item-plain'
from the vocabulary -->
<tal:def define="layout config/layout"
<metal:item use-macro="context/?layout/html" />
</tal:def>
任意のコンテンツタイプ。
このアプローチは意味がありますか?そうであれば、どのように辞書のビュー名をすべて見つけることができますか?
これは、Zopeのコンポーネントアーキテクチャを解決するために設計されて正確に何でありますあなたが何を求めているのかは不明です。利用可能なドキュメントを読んだことがありますか? –
私はドキュメントの回答を見つけられませんでした。 component.findAllMultiAdapters((IA、IB)、name = "*") –
ヒントをお寄せいただきありがとうございます。適切な名前のアダプタを見つけるためのメソッド(「findAllMultiAdapters」など)が存在する場合、 –