Рекомендуемый подход для обозначения типа контента ловкости с новым интерфейсом
Во время работы над проектом, основанным на ловкости, мне был нужен один из моих типов контента для поддержки colle.quickupload, пометив его интерфейсом IQuickUploadCapable.
В настоящее время я добавляю "инструменты" в мой файл configure.zcml:
`<class class="plone.dexterity.content.Container">
<implements interface="collective.quickupload.browser.interfaces.IQuickUploadCapable" />
</class>`
Так как мой тип контента - это Контейнер, это работает, однако первым делом я склонялся к использованию подхода в стиле грока вместо объявления его в ZCML. Что за способ "ловкий / ловкий" говорит моему типу контента "Ловкость", что он реализует дополнительный интерфейс, или я должен придерживаться текущего подхода?
Также я попытался добавить интерфейс как поведение в моем profiles/default/types/my.dexterity.content.xml
файл, но это не сработало (я действительно не ожидал, что поведение послужит другой цели).
3 ответа
Ответ Шона хорош. Другой способ - создать поведение и применить его. Вам необходимо зарегистрировать поведение с:
<plone:behavior
title="Quickupload"
provides="collective.quickupload.browser.interfaces.IQuickUploadCapable"
/>
После этого вы можете добавить 'colle.quickupload.browser.interfaces.IQuickUploadCapable' в свой список поведения в FTI.
Ваш подход не подходит, потому что это означает, что все типы Ловкости, основанные на контейнерах, получают интерфейс маркера, а не только ваш тип.
Почему бы просто не создать подкласс IQuickUploadCapable как mixin после form.Schema в вашем интерфейсе типов?
Вы не можете использовать это как поведение, потому что это не утверждает, что использовалось таким образом.
Как я читаю из pypi, предназначен для использования в портлете или в окне просмотра.
Чтобы добавить его в стиле Грока, вы должны:
from collective.quickupload.browser.interfaces import IQuickUploadCapable
from plone.directives import form
class IMyContent(form.schema):
grok.implements(IQuickUploadCapable)
И это все!
Убедитесь, что ваш тип контента позволяет добавлять в него файлы, поэтому он является папочным и позволяет добавлять файлы (или он просто не ограничивается каким-либо конкретным типом контента).