Python 将数据从Plone迁移到Liferay,或者如何从Plone';s Data.fs

Python 将数据从Plone迁移到Liferay,或者如何从Plone';s Data.fs,python,liferay,plone,zope,zodb,Python,Liferay,Plone,Zope,Zodb,我需要将数据从基于Plone的门户迁移到Liferay。有人知道怎么做吗 无论如何,我正在尝试从data.fs中检索数据,并将其存储在更易于工作的表示形式中,例如JSON。为此,我需要知道应该从Plone的Data.fs中获取哪些对象。我已经从Data.fs中获得了Products.CMFPlone.Portal.PloneSite实例,但我无法从中获得任何信息。我想获得PloneSite实例并执行如下操作: >>> import ZODB >>> from

我需要将数据从基于Plone的门户迁移到Liferay。有人知道怎么做吗

无论如何,我正在尝试从data.fs中检索数据,并将其存储在更易于工作的表示形式中,例如JSON。为此,我需要知道应该从Plone的Data.fs中获取哪些对象。我已经从Data.fs中获得了
Products.CMFPlone.Portal.PloneSite
实例,但我无法从中获得任何信息。我想获得
PloneSite
实例并执行如下操作:

>>> import ZODB
>>> from ZODB import FileStorage, DB
>>> path = r"C:\Arquivos de programas\Plone\var\filestorage\Data.fs"
>>> storage = FileStorage.FileStorage(path)
>>> db = DB(storage)
>>> conn = db.open()
>>> root = conn.root()
>>> app = root['Application']
>>> plone_site = app.getChildNodes()[13] # 13 would be index of PloneSite object
>>> a = plone_site.get_articles()
>>> for article in a:
...    print "Title:", a.title
...    print "Content:", a.content
Title: <some title>
Conent: <some content>
Title: <some title>
Conent: <some content>
导入ZODB >>>从ZODB导入文件存储,数据库 >>>path=r“C:\Arquivos de programas\Plone\var\filestorage\Data.fs” >>>存储=文件存储。文件存储(路径) >>>db=db(存储) >>>conn=db.open() >>>根=连接根() >>>app=root['Application'] >>>plone_site=app.getChildNodes()[13]#13将是plonSite对象的索引 >>>a=plone\u site.get\u articles() >>>对于a中的文章: ... 打印“标题:”,a.标题 ... 打印“内容:”,a.Content 标题: 内容: 标题: 内容: 当然,它不需要如此直截了当。我只想要一些关于
PloneSite
的结构以及如何恢复其数据的信息。有人知道吗


提前谢谢你

一旦掌握了Plone站点对象,就可以执行目录查询以查找站点中的所有内容项:

 >>> brains = site.portal_catalog.unrestrictedSearchResults()
这将返回一个“目录大脑”列表,每个列表都包含有关该项的一些元数据。您可以从大脑中获取完整项目:

 >>> for b in brains:
 ...     obj = b.getObject()
假设您的Plone站点使用的是基于原型的内容,那么您可以遍历项目架构的字段,并使用每个字段的访问器检索其值:

 >>> for field in obj.Schema().fields():
 ...     field_id = field.__name__
 ...     field_value = field.getAccessor(obj)()

由于ZODB是一个存储pickle Python对象的对象数据库,因此您需要在Python环境中提供正确版本的原型,以及定义您试图检索的对象类的包。

一旦找到Plone站点对象,您可以执行目录查询以查找站点中的所有内容项:

 >>> brains = site.portal_catalog.unrestrictedSearchResults()
这将返回一个“目录大脑”列表,每个列表都包含有关该项的一些元数据。您可以从大脑中获取完整项目:

 >>> for b in brains:
 ...     obj = b.getObject()
假设您的Plone站点使用的是基于原型的内容,那么您可以遍历项目架构的字段,并使用每个字段的访问器检索其值:

 >>> for field in obj.Schema().fields():
 ...     field_id = field.__name__
 ...     field_value = field.getAccessor(obj)()

由于ZODB是一个存储pickle Python对象的对象数据库,因此您需要在Python环境中提供正确版本的原型,以及定义您试图检索的对象类的包。

我正在进行小型研究,哪一个门户最适合我的需要。我真的很好奇,你为什么从Plone搬到Liferay?@MarcinJancewicz我为Liferay的一个合作伙伴工作,该合作伙伴签订了执行迁移的合同。事实上,我们做了很多Plone Liferay迁移。Plone(或者更准确地说,Zope)被认为是难以开发和维护的。而且,ZODB很容易发生数据库损坏。我没有直接与Plone合作,但这是我们的客户告诉我们的。OTOH,我和Liferay一起工作过很多,这是一个很好的工具。我们建议您了解JSP、Servlet、Struts、Spring等。正式的Liferay课程将为您节省大量时间,一旦您了解了所有内容,您将非常有效率。我正在研究哪个门户最适合我的需要。我真的很好奇,你为什么从Plone搬到Liferay?@MarcinJancewicz我为Liferay的一个合作伙伴工作,该合作伙伴签订了执行迁移的合同。事实上,我们做了很多Plone Liferay迁移。Plone(或者更准确地说,Zope)被认为是难以开发和维护的。而且,ZODB很容易发生数据库损坏。我没有直接与Plone合作,但这是我们的客户告诉我们的。OTOH,我和Liferay一起工作过很多,这是一个很好的工具。我们建议您了解JSP、servlet、Struts、Spring等,正式的Liferay课程将为您节省大量时间,一旦您了解了所有内容,您将非常有效率。