0

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

无论如何,我正在尝试从 Data.fs 中检索数据并将其存储在更易于工作的表示中,例如 JSON。为此,我需要知道应该从 Plone 的 Data.fs 中获取哪些对象。我已经Products.CMFPlone.Portal.PloneSite从 Data.fs 中获得了实例,但我无法从中获得任何东西。我想获取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以及如何恢复其数据的信息。有人知道吗?

先感谢您!

4

1 回答 1

3

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

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

这将返回一个“目录大脑”列表,其中每个都包含有关该项目的一些元数据。您可以从大脑中获取完整的项目:

 >>> 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 环境中存在正确版本的 Archetype,以及定义您尝试检索的对象类的包。

于 2010-04-15T00:29:59.793 回答