Plone Normalizer и Letter Case - PullRequest
       28

Plone Normalizer и Letter Case

1 голос
/ 27 декабря 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

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

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

0 голосов
/ 27 декабря 2011

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

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

...