我可以为 Plone 4.1 中的文件夹内容添加自定义限制吗?例如。将文件夹限制为仅包含扩展名为 *.doc、*.pdf 的文件 我知道 Plone 中可用的文件/文件夹/页面/图像等一般限制
问问题
307 次
1 回答
1
并非没有额外的发展;您必须使用验证器扩展 File 类型以限制允许的 mime 类型。
在不深入细节的情况下(如果您遇到困难,请自行尝试并在此处询问更多问题),如果遇到此问题,以下是我将实施的各种活动部分:
创建一个新
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
使用注册器注册您的验证器实例:
from Products.validation.config import validation validation.register(LocalContentTypesValidator('checkLocalContentTypes'))
使用基类模式的副本创建 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',)
将字段添加到文件夹或自定义子类以存储本地允许的内容类型列表。我可能会用
archetypes.schemaextender
这个。WebLion has a nice tutorial
例如,这些天有很多关于这方面的文档。当然,您必须就如何让人们在这里限制 mime 类型做出政策决定;通配符、自由格式文本、词汇表等。
于 2012-06-04T09:16:50.243 回答