Plone 从(现已过时)自定义ATImage内容类型迁移

Plone 从(现已过时)自定义ATImage内容类型迁移,plone,archetypes,Plone,Archetypes,我们有一个完整的Plone 3站点集合,具有自定义图像类型 从ATImage派生的子类。这使我们可以向图像添加额外的图像缩放 标准列表(“'logo':(454,58)”,由我们的主题包使用) 虽然这在Plone 4中仍然有效,但现在这并不是正确的方法 plone.app.imaging是标准工具包的一部分。可以在上定义自定义比例的 苍蝇 看起来我可以在任何类型的子类上启用plone.app.imaging 只需为自定义图像集合设置“size=None”即可从ATImage中删除 字体上的刻度。

我们有一个完整的Plone 3站点集合,具有自定义图像类型 从ATImage派生的子类。这使我们可以向图像添加额外的图像缩放 标准列表(“'logo':(454,58)”,由我们的主题包使用)

虽然这在Plone 4中仍然有效,但现在这并不是正确的方法 plone.app.imaging是标准工具包的一部分。可以在上定义自定义比例的 苍蝇

看起来我可以在任何类型的子类上启用plone.app.imaging 只需为自定义图像集合设置“size=None”即可从ATImage中删除 字体上的刻度。然而,我留下了一个多余的ATImage子类。 从长远来看,替换我们现有的“FalconImage”会很有用 包含标准“图像”内容项的内容项(总共数百个)

在一个测试站点上的一个简短实验表明,如果我只是浏览一下文档 树将门户类型属性从“FalconImage”更新为“Image”,然后 内容表现为“图像”:每个对象突然获得一个 “变换”选项卡和@@imaging控制面板定义的所有比例

我相信,这种暴力手段会带来后果。 是否有将一种类型转换为另一种类型的推荐方法

(如果有人这么认为的话,我很乐意为我们的定制图片类型添加源代码 它是相关的。它实际上只是对ATImage的一个非常小的调整,带有一个
图像字段上的不同大小集合)

是的,建议采用以下方法:

您必须做的唯一一件事就是编写从FalconImage到Image的自定义迁移

再见,
Giacomo

您需要使用这些文档,但是没有开始的地方。使用可逐步迁移内容。

感谢Giacomo和Ross的指点

为了防止对其他人有用,我的迁移代码最终看起来如下所示:

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()
并发症:

  • 图像作为目标类型有点奇怪,因为数据被迁移到blob存储中

  • 我们需要更新目录,以便由TinyMCE生成“resolveuid/UID”链接 继续工作。Migrator类上的最后一个\u migrate\u reindex()方法应该比从头开始清除和重建整个目录更快


  • 遗憾的是,链接现在被重定向到(删除所有路径信息);看见“你碰巧不知道一个工作URL?不,我也找不到了,@Tobias”