当我创建Archetypes文件夹时,用“我的文件夹”填充标题字段,ID(短名称)将被标准化为“我的文件夹”。总的来说这很好。但我希望项目保留字母大小写,例如,来自某个特定文件夹及以下的项目,或特定类型的项目。什么是最佳做法?
此外,我发现只需上传名为“MyFile.pdf”的文件即可添加文件(或图像),ID将为“MyFile.pdf”。在这种情况下,Normalizer什么都不做?
最后,使用collective.quickupload上传名为“MyFile.pdf”的文件,该ID将被标准化为“myfile.pdf”。如果我想要保留字母的话,这里最好的做法是什么?
答案 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.content
包provides an implementation使用相同的plone.i18n
基础设施。
答案 1 :(得分:0)
对于常规类型(文件夹和页面),始终会进行规范化以确保您网站的可读性和一致性,文件类型(文件和图像)文件名按原样使用。
无论哪种方式,您都可以随时转到Actions
- > Rename
并更改其标题和ID。