2011-08-31 33 views
4

我們收集了一整套Plone 3網站,其中包含一個自定義圖像類型 ,它們分別來自ATImage。這使我們能夠爲 標準列表(「'logo':(454,58)」)添加額外的圖像縮放比例,我們的主題包使用了該標準列表。從(現在已過時)定製ATImage內容類型遷移

雖然這在Plone 4中仍然有效,但現在並不是真正的方法,因爲plone.app.imaging是標準工具包的一部分。這可以在飛行中定義自定義比例尺 。

它看起來像我可以通過簡單地設置「尺寸=無」爲該類型的自定義 比例集合的任何類型子類 從ATImage啓用plone.app.imaging。然而,我留下了ATImage的冗餘子類。長期看,用標準的「圖像」內容項目替換我們現有的所有「FalconImage」 內容項目(總共數百項)將會很有用。

在測試站點上一個簡單的試驗表明,如果我只是走過的文件 樹從「FalconImage」到「圖片」更新portal_type屬性,那麼 內容表現爲一種「圖像」:每一個對象突然取得 變換選項卡以及由@@ imaging-controlpanel定義的所有比例。

我相信會有這樣一個暴力方法的後果。 是否有推薦的方法將一種類型轉換爲另一種類型?

(我很高興我們的定製ATImage類型,如果有人認爲 它是相關的補充來源。這是真的只是一個ATImage的很小的調整,與上一ImageField的不同 集合大小的)

回答

1

您需要使用Products.contentmigration但該文檔沒有開始的地方。使用docs at plone.org逐步遷移內容。

+0

不幸的是,該鏈接現在重定向到https://docs.plone.org/(丟棄所有路徑信息);請參閱[更改文檔位置](https://community.plone.org/t/changed-documentation-locations/4252/8?u=tobiasherp)。你不會偶然知道一個工作網址? – Tobias

+0

不,我再也找不到它了,@Tobias –

1

感謝賈科莫和羅斯的指點。

以防萬一它是有用的人,我的移民代碼最終看上去像下面這樣:

from Products.contentmigration.walker import CustomQueryWalker 
from Products.contentmigration.archetypes import InplaceATItemMigrator 

class FalconImageMigrator(InplaceATItemMigrator): 
    walker = CustomQueryWalker 
    src_meta_type = "FalconImage" 
    src_portal_type = "FalconImage" 
    dst_meta_type = "ATBlob" 
    dst_portal_type = "Image" 

    # Following stolen from plone.app.blob.migrations, ATImageToBlobImageMigrator 
    # migrate all fields except 'image', which needs special handling... 
    fields_map = { 
     'image': None, 
    } 

    def migrate_data(self): 
     self.new.getField('image').getMutator(self.new)(self.old) 

    # ATFileToBlobMigrator reindexes certain fields. Otherwise we 
    # need to clear and rebuild the entire catalog. 
    def last_migrate_reindex(self): 
     self.new.reindexObject(idxs=['object_provides', 'portal_type', 
      'Type', 'UID']) 

migrator = FalconImageMigrator 
walker = migrator.walker(portal, FalconImageMigrator) 

walker.go() 
print walker.getOutput() 

併發症:

  1. 形象是一個有點奇怪的目標類型,如數據被遷移到blob商店。

  2. 我們需要更新目錄,以便TinyMCE 生成的「resolveuid/UID」鏈接繼續工作。 Migrator類上的last_migrate_reindex()方法應該比從頭開始清理和重建整個目錄更快。