0

Plone ベースのポータルから Liferay にデータを移行する必要があります。誰かがそれを行う方法について何か考えがありますか?

とにかく、Data.fs からデータを取得し、JSON などの作業しやすい表現に格納しようとしています。そのためには、Plone の Data.fs からどのオブジェクトを取得する必要があるかを知る必要があります。既にProducts.CMFPlone.Portal.PloneSiteData.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環境に正しいバージョンのアーキタイプと、取得しようとしているオブジェクトのクラスを定義するパッケージが存在する必要があります。

于 2010-04-15T00:29:59.793 に答える