实现
功能的最佳方法是什么?所有商品都会获得新的ID,不会自动编辑标题,也不需要手动重命名
这将使用默认情况下Plone使用的id规范化+计数器格式
可以为所有Archetypes内容类型全局启用
答案 0 :(得分:7)
Yuri在正确的轨道上 - 快速而且非常脏,我相信这会奏效:
context.setTitle('lorem ipsum')
context.unmarkCreationFlag()
context.processForm()
严格来说,这不是文档所说的 - 因为它不应该重命名,如果它没有门户工厂中生成的临时ID,但是当我修改了仍有的对象的标题时,我正在重命名CreationFlag标记为
答案 1 :(得分:3)
除了这是一个坏主意(每次编辑标题时所有网址都中断),我会使用自定义事件执行此操作。您必须复制在创建时重命名对象时使用的Archetypes内置的一些功能,因为您不希望每次编辑时都重命名:
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)
答案 2 :(得分:0)
我认为archetypes内置了这个:
http://plone.org/documentation/kb/richdocument/controlling-creation
如果您需要对标题的生成方式进行更细粒度的控制,可以从“Archetypes / BaseObject.py”重新定义_renameAfterCreation()方法
所以重新定义它应该是方式。