2011-12-27 57 views
1

當我創建Archetypes文件夾,填寫Title字段和「我的文件夾」時,ID(簡稱)將被標準化爲「我的文件夾」。總的來說這很好。但我希望物品保留字母大小寫,例如來自某個特定文件夾和下面的物品或特定類型的物品。最佳做法是什麼?Plone Normalizer和Letter Case

此外,我發現通過簡單地上傳名爲「MyFile.pdf」的文件添加文件(或圖像),ID將是「MyFile.pdf」。 Normalizer在這種情況下不做任何事情?

最後,使用collective.quickupload上傳名爲「MyFile.pdf」的文件,ID將被標準化爲「myfile.pdf」。如果我想保留字母大小寫,這裏最佳做法是什麼?

回答

2

原型使用generateNewId方法在創建時創建標識。你可以在你自己的類型上覆蓋它。這是默認的實現,所以你可以看到它是如何工作的:

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基礎結構。

0

對於常規類型(文件夾和頁面),標準化始終發生,以確保您網站的可讀性和一致性,文件類型(文件和圖像)文件名按原樣使用。

無論哪種方式,你總是可以去Actions - >Rename並改變它的標題和它的ID。