Plone:如何将mixin类应用于标准的ATFolder类

Plone:如何将mixin类应用于标准的ATFolder类,plone,plone-4.x,archetypes,Plone,Plone 4.x,Archetypes,我有一个用于自定义基于原型的内容对象的getThumbnailPath方法;它选择预览图像,将缩放后的副本放入文件系统(如果尚未更新),并返回类似于/+++缩略图+++/.jpg的内容,以便Apache为缩略图提供服务。由于结果存储为列表视图的目录中的元数据字段,这应该非常有效:所有检查和缩放仅在重新计算元数据时完成,对于标准访问,不涉及Python线程 但是,我也需要一些文件夹的预览图像(例如,使用该文件夹中的第一个MyImage对象)。我可以将我的方法的一个特殊版本修补到ATFolder,但

我有一个用于自定义基于原型的内容对象的
getThumbnailPath
方法;它选择预览图像,将缩放后的副本放入文件系统(如果尚未更新),并返回类似于
/+++缩略图+++/.jpg
的内容,以便Apache为缩略图提供服务。由于结果存储为列表视图的目录中的元数据字段,这应该非常有效:所有检查和缩放仅在重新计算元数据时完成,对于标准访问,不涉及Python线程

但是,我也需要一些文件夹的预览图像(例如,使用该文件夹中的第一个
MyImage
对象)。我可以将我的方法的一个特殊版本修补到
ATFolder
,但是注入我的mixin类可能会更干净。这可能吗

更新: Ulrich Schwarz向我指出了使用适配器和接口的可能性(也许每个适配器和接口一个?)。基于此,我目前的想法是:

  • 有一个接口类
    IThumbnailable
    ,它由我的自定义类型和
    ATFolder
    实现。它提供了
    getThumbnailPath
    方法,可能还提供了支持数据
  • 有一个适配器,可能称为
    thumbnail
    ,它可能提供
    getThumbnailPath
    方法的实现
缩略图选择逻辑

对于我自己的内容类型,我能够基于一个小的mixin类层次结构实现以下功能:

  • 如果对象的架构包含一个
    图像
    字段,并且该字段非空,则使用此图像:将其缩放版本存储到文件系统,并返回访问该文件系统的路径
  • 否则,如果对象的方法
    getRawText
    返回包含
    属性的文本,该属性通过
    uid
    引用对象,则查找该对象并返回其
    getThumbnailPath
    方法的结果
  • 对于文件夹,我希望有(目前由monkey patching完成):

  • 如果文件夹包含作为直接子对象的图像(
    MyImage
    对象),请使用第一个(目录搜索,
    'sort\u on':'getObjPositionParent'
    )并返回其
    getThumbnailPath
    方法的结果
  • 如果文件夹有标准页面,请使用该页面的
    getRawText
  • 回到mixin类:

  • 如果其他操作无效,请将路径返回到当前类型的标准缩略图

  • 因此,对于最终的解决方案,我需要考虑是应该保持我的小层次结构还是检查每一个对象。

    来拯救?您的功能将位于一个单独的界面
    IThumbnailable
    ,并且您可以提供代码,允许您将ATFolders和自定义类型强制转换为
    IThumbnailable
    。这可能是一种方法,谢谢。我需要解决这个问题;可能我会更新我的问题…希望我正确地理解了您的要求,不确定您希望在何处显示缩略图,但要创建专用缩略图,您可以使用collective.contentleadimage扩展带有图像字段的文件夹。如果要显示文件夹中的第一个图像,请使用浏览器视图对模板添加一点逻辑。@IdaEbkes:我对几个旋转木马视图和列表视图使用缩略图。这些是我的网站上经常使用的,内容应该完全来自目录数据;一个很好的副作用是,现在所有这些缩略图都是由Apache直接提供的。目前,我基于monkeypatch的解决方案工作正常;然而,我试图消除这些有点黑客的解决方案。我在这里贴了一个链接到你的问题