Сохранить объекты в другой экземпляр в 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).