Отображать действия только для определенных папок - PullRequest
2 голосов
/ 11 мая 2011

Я добавил пользовательское действие CMF в / mysite / portal_actions / object / rename. Значение поля «Условие (выражение)» равно python:plone_context_state.is_folderish() or plone_context_state.is_default_page(), что делает действие видимым на вкладке каждой папки. Я хочу, чтобы он показывался только на вкладках folder1, folder2 и folder3. Что я должен использовать для поля Condition?

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

У вас есть несколько вариантов;выражение условия может быть расширено почти бесконечно.

По идентификатору папки

Очевидным тестом будет проверка набора идентификаторов папки:

python:(plone_context_state.is_folderish() or plone_context_state.is_default_page()) and
        folder.getId() in ('folder1', 'folder2', 'folder3')

Использование colle.flag

colle.flag пусть ваши редакторы контента определят, где должна отображаться вкладка.Он добавляет простой логический флажок к вашему контенту, и вы можете легко проверить, установлен ли этот флаг в ваших папках.Флаг отображается только для типов контента, которые имеют правильный интерфейс, поэтому вы можете легко сделать это

python:(plone_context_state.is_folderish() or plone_context_state.is_default_page()) and 
        folder.restrictedTraverse('@@plone_interface_info').provides('collective.flag.interfaces.IFlaggableObject')

Использовать тестовый скрипт

Вы можете использовать любой тестируемый метод для вашего теста, включаяскрипт Python в скине.Не самая лучшая практика, но она может просто дать вам дополнительную гибкость, в которой вы нуждаетесь.

python:(plone_context_state.is_folderish() or plone_context_state.is_default_page()) and
        folder.yourScriptName()

Просто не забудьте проверить условия на folder.

0 голосов
/ 11 мая 2011

python: (plone_context_state.is_folderish () и (object.getId () == 'folder1' или object.getId () == 'folder2' или object.getId () == 'folder3')) или (plone_context_state.is_default_page () и (plone_context_state.parent.getId () == 'folder1' или plone_context_state.parent.getId () == 'folder2' или plone_context_state.parent.getId () == 'folder3'))

как то так.Вы можете использовать путь к папке, чтобы убедиться, что они являются именно этими папками, а не просто папками с этими идентификаторами.

...