Поиск способа вести реестр представлений и именованных адаптеров в Plone 4 чисто ZCML или grok, не создавая registerSomething(myClass)
.
Например, если у меня есть основной продукт, которому нужен словарь имен для всех именованных (мульти)адаптеров определенной природы. Продукт может предоставлять несколько адаптеров, но другие адаптеры могут быть получены от других продуктов (сторонних производителей), которые не должны зависеть от основного продукта.
Очевидным способом является создание какого-либо реестра, такого как PloneArticle, для отслеживания моделей страниц (registerArticleModel(MyPageModel)
), но я надеюсь, что есть более чистый способ.
Вопрос в том, есть ли чисто 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"
/>
...
В шаблоне:
<-- 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>
Где контекст — это почти любой тип контента.
Есть ли смысл в этом подходе? Если это так, как я могу найти все эти имена представлений для словаря?