1

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

4

1 回答 1

2

简短的回答:通常是可能的,并且您有多种选择,具体取决于您的设置。

如果我正确理解了您的问题和您的设置,那么您有两个 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'

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

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

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

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

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

另一种选择是,当 SiteA 接收到表单数据时,它会使用 urllib 和 urllib2 向 SiteB 发送请求。在这种情况下,您会非常想念 requests 模块(在 Python2.4 中不可用)。

于 2017-05-25T22:17:43.483 回答