Как напрямую публиковать только дочерние элементы типа моего контейнера в Plone? - PullRequest
8 голосов
/ 13 июля 2011

У меня есть пользовательский тип контента Dexterity в Plone. Он может иметь только документы в качестве детей. Я хочу, чтобы эти документы публиковались напрямую по мере их создания.

Я могу легко добиться этого, установив соответствующий рабочий процесс для типа документа, но это повлияет на каждый документ на моем сайте. Я хочу, чтобы только те из моего типа контейнера были опубликованы напрямую.

На ум приходят два варианта:

Пользовательская страница

Создайте в основном только копию стандартного типа документа и установите для его рабочего процесса то, что имеет только опубликованное состояние.

Событие

Добавьте событие IObjectAdded для документов и проверьте, является ли родительский объект нового документа моим типом контейнера, и выполните публикацию вручную в коде Python.

Ни то, ни другое не звучит слишком хорошо. У меня есть другие варианты?

Ответы [ 3 ]

11 голосов
/ 13 июля 2011

Вам нужен продукт «Поддержка политик рабочего процесса (CMFPlacefulWorkflow)» (это часть Plone по умолчанию):

Add in Plone the capability to change workflow chains for types in every object.

Рабочий процесс можно настроить для отдельных папок или для этой папки, а также для всех папок, указанных ниже.это.

4 голосов
/ 13 июля 2011

Создайте новый автоматический переход в используемом рабочем процессе с защитой:

python:container.meta_type == 'ATFolder'

, который будет запускаться только в том случае, если родительский объект имеет стандартную папку'type (обратите внимание, что мета-тип и имя типа не совпадают).

Недостатком этого является то, что он будет запущен относительно рано в процессе создания, поэтому пользователь увидит сообщение об ошибке, если ониУ меня недостаточно прав для завершения создания опубликованного объекта.

Если это не соответствует вашим ожиданиям, я думаю, что событие - ваша ближайшая ставка.

2 голосов
/ 13 июля 2011

Используйте подписчика на событие, чтобы запустить автоматический переход рабочего процесса (например, подписавшись на IObjectInitializedEvent и проверив IYourDexterityFolderishType.providedBy(aq_parent(obj)) - см. plone документы для разработчиков сообщества )

...