从Plone迁移数据到Liferay,如何从Plone的Data.fs中提取信息

0 投票
1 回答
1067 浏览
提问于 2025-04-15 20:06

我需要把一个基于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>

当然,这个过程不一定要那么简单。我只是想了解一下PloneSite的结构,以及如何提取它的数据。有没有人能给点建议?

提前谢谢大家!

1 个回答

3

一旦你拿到了Plone网站的对象,你就可以进行一个目录查询,来找到网站里的所有内容项:

 >>> brains = site.portal_catalog.unrestrictedSearchResults()

这个查询会返回一个“目录脑”(catalog brains)的列表,每个“脑”里都包含了一些关于这个内容项的元数据。你可以通过这个“脑”来获取完整的内容项:

 >>> for b in brains:
 ...     obj = b.getObject()

假设你的Plone网站使用的是基于Archetypes的内容,你可以遍历这个内容项的结构中的字段,并使用每个字段的访问器来获取它的值:

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

因为ZODB是一个对象数据库,它存储的是经过处理的Python对象,所以你需要在你的Python环境中有正确版本的Archetypes,以及定义你想要获取的对象类的包。

撰写回答