Plone Normalizer和Letter Case

时间:2011-12-27 09:54:09

标签: plone archetypes

当我创建Archetypes文件夹时,用“我的文件夹”填充标题字段,ID(短名称)将被标准化为“我的文件夹”。总的来说这很好。但我希望项目保留字母大小写,例如,来自某个特定文件夹及以下的项目,或特定类型的项目。什么是最佳做法?

此外,我发现只需上传名为“MyFile.pdf”的文件即可添加文件(或图像),ID将为“MyFile.pdf”。在这种情况下,Normalizer什么都不做?

最后,使用collective.quickupload上传名为“MyFile.pdf”的文件,该ID将被标准化为“myfile.pdf”。如果我想要保留字母的话,这里最好的做法是什么?

2 个答案:

答案 0 :(得分:2)

Archetypes使用generateNewId方法在创建时创建id。您可以在自己的类型上覆盖它。这是默认实现,因此您可以看到它应该如何工作:

try:
    from plone.i18n.normalizer.interfaces import IUserPreferredURLNormalizer
    from plone.i18n.normalizer.interfaces import IURLNormalizer
    URL_NORMALIZER = True
except ImportError:
    URL_NORMALIZER = False

class BaseObject(Referenceable):

    # ...

    def generateNewId(self):
        """Suggest an id for this object.
        This id is used when automatically renaming an object after creation.
        """
        title = self.Title()
        # Can't work w/o a title
        if not title:
            return None

        # Don't do anything without the plone.i18n package
        if not URL_NORMALIZER:
            return None

        if not isinstance(title, unicode):
            charset = self.getCharset()
            title = unicode(title, charset)

        request = getattr(self, 'REQUEST', None)
        if request is not None:
            return IUserPreferredURLNormalizer(request).normalize(title)

        return queryUtility(IURLNormalizer).normalize(title)

如您所见,默认实现遵循IUserPreferredURLNormalizer适配器(如果请求可用)和IURLNormalizer实用程序(如果没有);你也可以提供自己的实现;有关这些工作原理的详细信息,请参阅plone.18n.normalizer package on GitHub。你无法区分类型或位置。

敏捷内容使用INameChooser界面,而plone.app.contentprovides an implementation使用相同的plone.i18n基础设施。

答案 1 :(得分:0)

对于常规类型(文件夹和页面),始终会进行规范化以确保您网站的可读性和一致性,文件类型(文件和图像)文件名按原样使用。

无论哪种方式,您都可以随时转到Actions - > Rename并更改其标题和ID。