我们有一整套Plone 3网站,其中包含自定义图像类型 来自ATImage的子类。这允许我们添加额外的图像缩放到 标准清单(“'logo':( 454,58)”,由我们的主题包使用。)
虽然这仍然适用于Plone 4,但它现在并不是真正的正确方法 plone.app.imaging是标准工具包的一部分。这可以定义自定义比例 苍蝇。
看起来我可以在任何类型的子类上启用plone.app.imaging 通过简单地为自定义集合设置“sizes = None”来自ATImage 缩放类型。然而,我留下了ATImage的冗余子类。 从长远来看,更换我们现有的所有“FalconImage”会很有用 带有标准“图像”内容项的内容项(总共数百个)。
测试网站上的简短实验表明,如果我只是浏览文档 树将portal_type属性从“FalconImage”更新为“Image”然后 内容表现为“图像”:每个对象突然获得一个 转换选项卡和@@ imaging-controlpanel定义的所有比例。
我相信这种蛮力方法会产生影响。 是否有推荐的方法将一种类型转换为另一种类型?
(如果有人认为,我很乐意为我们的自定义ATImage类型添加源代码 这是相关的。它实际上只是ATImage的一个非常小的调整,有一个 ImageField上不同的大小集合
答案 0 :(得分:2)
是的,有一种推荐的方法:
http://pypi.python.org/pypi/Products.contentmigration
您唯一需要做的就是编写从FalconImage到Image的自定义迁移。
再见 贾科莫
答案 1 :(得分:1)
您需要使用Products.contentmigration
,但那里的文档无处可寻。使用docs at plone.org逐步了解迁移内容。
答案 2 :(得分: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()
并发症:
当数据迁移到blob存储区时,Image作为目标类型有点奇怪。
我们需要更新目录,以便TinyMCE生成“resolveuid / UID”链接 继续工作。 Migrator类的last_migrate_reindex()方法应该比从头开始清理和重建整个目录更快。