从Plone迁移数据到Liferay,如何从Plone的Data.fs中提取信息
我需要把一个基于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,以及定义你想要获取的对象类的包。