Архетипы используют метод 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
.