Plone Normalizer и Letter Case

Когда я создаю папку архетипов, заполняя поле «Название» «Моя папка», идентификатор (короткое имя) будет нормализован как «моя папка». Это хорошо в целом. Но я хочу, чтобы элементы резервировали буквенный регистр, скажем, элементы из какой-то определенной папки и ниже или элементы определенных типов. Какова наилучшая практика?

Кроме того, я нахожу файл (или изображение), добавленный путем простой загрузки файла с именем «MyFile.pdf», идентификатор будет «MyFile.pdf». Нормализатор ничего не делает в этом случае?

Наконец, при загрузке файла с именем «MyFile.pdf» с помощью коллективного.quickupload идентификатор будет нормализован как «myfile.pdf». Какова наилучшая практика, если я хочу зарезервированный регистр букв?


person marr    schedule 27.12.2011    source источник


Ответы (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 на GitHub для более подробной информации о том, как эти работы. Однако вы не можете отличить их по типу или местоположению.

Вместо этого контент Dexterity использует интерфейс INameChooser, для которого пакет plone.app.content предоставляет реализацию, использующую ту же plone.i18n инфраструктуру.

person Martijn Pieters    schedule 27.12.2011

Для обычных типов (папка и страница) всегда выполняется нормализация, чтобы обеспечить удобочитаемость и согласованность на вашем сайте, файловые типы (файл и изображение) имя файла используется как есть.

В любом случае вы всегда можете перейти к Actions -> Rename и изменить как его заголовок, так и его идентификатор.

person gforcada    schedule 27.12.2011