将对象保存到 Plone 中的另一个实例 3.x

Save objects to another instance in Plone 3.x

在 Plone 中以编程方式创建对象(如新闻)时 3.x 是否可以将其保存到另一个实例中的文件夹中?

简短回答:这通常是可能的,并且根据您的设置,您有多种选择。

如果我正确理解了你的问题和你的设置,那么你在同一个 ZODB 中有两个 Plone 实例 运行。

像这样:

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'

例如,您可以执行复制移动操作添加一个事件订阅者。

当然,您必须注意权限设置。 我粘贴的示例之所以有效,是因为我使用的是在 zope 应用程序的 acl_users 文件夹中定义的用户管理员。

但从技术上讲,您可以通过调整安全管理器来实现此结果。

如果两个 Plone 站点不在同一个 ZODB 中,请不要担心 :) 如果两个站点之一(或两个站点)不是 运行 Plone,有些解决方案也可以使用。

例如,您可以在网站 A 上创建一个发布到网站 B 的表单。 如果您在两个站点之间有 SSO,它可能就像将操作属性 url 从 /SiteA/folder1/add_form 更改为 /SiteB/folder2/add_form.

一样微不足道

另一种选择是,当 SiteA 收到表单数据时,它会使用 urllib 和 urllib2 向 SiteB 发出请求。在这种情况下,您将错过很多请求模块(在 Python2.4 中不可用)。