Автоматическое переименование идентификатора после изменения названия - PullRequest
5 голосов
/ 20 марта 2012

Что может быть лучшим способом для достижения функциональности, которая

  • Все элементы получают новый идентификатор на основе без редактирования заголовков автоматически, нет необходимости переименовывать элементы вручную

  • При этом будет использоваться формат нормализации идентификатора + счетчик, используемый Plone по умолчанию

  • Может быть включен глобально для всех типов содержимого архетипов

Ответы [ 3 ]

7 голосов
/ 20 марта 2012

Юрий на правильном пути - для быстрого и очень грязного, я считаю, это будет работать:

context.setTitle('lorem ipsum')
context.unmarkCreationFlag()
context.processForm()

Строго говоря, это не то, что написано в документации - поскольку он не должен делать переименование, если у него нет временного идентификатора, сгенерированного в фабрике портала, но я получал переименование, когда я изменял заголовки объектов, которые все еще имели CreationFlag с пометкой

3 голосов
/ 20 марта 2012

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

from Products.Archetypes.interfaces import (
    IBaseObject,
    IObjectEditedEvent,
)
import re
from zope.component import adapter


endsWithNumber = re.compile('-\d+$')


@adapter(IBaseObject, IObjectEditedEvent)
def renameOnEdit(obj, event):
    old_id = obj.getId()
    without_number = endsWithNumber.sub('', old_id)

    # New id based on Title
    new_id = obj.generateNewId()
    if new_id == old_id or new_id == without_number:
        # No change
        return

    new_id = obj._findUniqueId(new_id)
    if new_id is None:
        # Couldn't find a new unique id (out of sequence numbers?)
        return

    obj.setId(new_id)
0 голосов
/ 20 марта 2012

Я думаю, что в архетипах это встроено:

http://plone.org/documentation/kb/richdocument/controlling-creation

Если вам нужен более детальный контроль над тем, как создаются заголовки, вы можете переопределить метод _renameAfterCreation ()из 'Archetypes / BaseObject.py'

Так что переопределение должно быть таким.

...