1

我可以为 Plone 4.1 中的文件夹内容添加自定义限制吗?例如。将文件夹限制为仅包含扩展名为 *.doc、*.pdf 的文件 我知道 Plone 中可用的文件/文件夹/页面/图像等一般限制

4

1 回答 1

1

并非没有额外的发展;您必须使用验证器扩展 File 类型以限制允许的 mime 类型。

在不深入细节的情况下(如果您遇到困难,请自行尝试并在此处询问更多问题),如果遇到此问题,以下是我将实施的各种活动部分:

  1. 创建一个新IValidator类来检查允许的内容类型:

    from zope.interface import implements
    from Products.validation.interfaces.IValidator import IValidator
    
    class LocalContentTypesValidator(object):
        implements(IValidator)
    
        def __init__(self, name, title='', description='')
            self.name = name
            self.title = title or name
            self.description = description
    
        def __call__(value, *args, **kwargs):
            instance = kwargs.get('instance', None)
            field    = kwargs.get('field', None)
    
            # Get your list of content types from the aq_parent of the instance
            # Verify that the value (*usually* a python file object)
            # I suspect you have to do some content type sniffing here
    
            # Return True if the content type is allowed, or an error message
    
  2. 使用注册器注册您的验证器实例:

    from Products.validation.config import validation
    validation.register(LocalContentTypesValidator('checkLocalContentTypes'))
    
  3. 使用基类模式的副本创建 ATContentTypes ATFile 类的新子类,以将验证器添加到其验证链中:

    from Products.ATContentTypes.content.file import ATFile, ATFileSchema
    
    Schema = ATFileSchema.schema.copy()
    Schema['file'].validators = schema['file'].validators + (
        'checkLocalContentTypes',)
    
    class ContentTypeRestrictedFile(ATFile):
        schema = Schema
        # Everything else you need for a custom Archetype
    

    或者如果您希望将其应用于部署中的所有 File 对象,则只需更改 ATFile 模式本身:

    from Products.ATContentTypes.content.file import ATFileSchema
    
    ATFileSchema['file'].validators = ATFileSchema['file'].validators + (
        'checkLocalContentTypes',)
    
  4. 将字段添加到文件夹或自定义子类以存储本地允许的内容类型列表。我可能会用archetypes.schemaextender这个。WebLion has a nice tutorial例如,这些天有很多关于这方面的文档。

    当然,您必须就如何让人们在这里限制 mime 类型做出政策决定;通配符、自由格式文本、词汇表等。

于 2012-06-04T09:16:50.243 回答