Сохранить объекты в другой экземпляр в Plone 3.x

При программном создании объекта (например, новостей) в Plone 3.x возможно ли сохранить его в папке в другом экземпляре?

1 ответ

Решение

Краткий ответ: как правило, это возможно, и у вас есть различные варианты в зависимости от ваших настроек.

Если я правильно понял ваш вопрос и ваши настройки, у вас есть два экземпляра Plone, работающие в одном ZODB.

Что-то вроде этого:

ipdb> self.context
<Application at >
ipdb> self.context.SiteA
<PloneSite at /SiteA>
ipdb> self.context.SiteB
<PloneSite at /SiteB>

Если это так, вы можете скопировать или переместить объект на новый сайт, как показано в следующем сеансе отладки:

ipdb> cpdata = self.context.SiteA.manage_copyObjects(['front-page'])
ipdb> self.context.SiteB.manage_pasteObjects(cpdata)
[{'new_id': 'copy_of_front-page', 'id': 'front-page'}]
ipdb> self.context.SiteB['copy_of_front-page'].Title()
'Welcome to Plone'

Например, вы можете выполнить операцию перемещения копии, добавив подписчика на событие.

Конечно, вы должны позаботиться о настройках разрешений. Пример, который я вставил, работал, потому что я использовал пользователя admin, который определен в папке acl_users приложения zope.

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

Если два сайта Plone не находятся в одном и том же ZODB, не беспокойтесь:) Существуют решения, которые также будут работать, если один из двух сайтов (или оба) не работают под управлением Plone.

Например, вы можете создать на сайте A форму, которая будет публиковать на сайте B. Если у вас есть единый вход между двумя сайтами, это может быть столь же тривиально, как изменение URL-адреса атрибута действия с /SiteA/folder1/add_form в /SiteB/folder2/add_form,

Другой вариант заключается в том, что когда SiteA получает данные формы, он обрабатывает запрос с urllib и urllib2 к SiteB. В этом случае вы часто будете скучать по модулю запросов (недоступно в Python2.4).

Другие вопросы по тегам