我有一个 Plone 4 站点,它停止重命名新的原型对象;创建后(如/temp/portaltype.2015-04-23.1234567890
)并保存第一个更改,包括给它一个标题,它应该重命名为更好的(/temp/an-object-with-a-meaningful-name
),但这不再发生。
当我应用一些更改将 Plone 从 4.3.3 更新到 4.3.4(一次一步)时,也许出现了问题; 但我继承了一个很长的versions.cfg
,它仅按包名称排序,不包含任何提示为什么选择某些版本......
我可以回到两个月前,有一个可以重命名的版本,但是如果没有更多关于要查找的内容的知识,这将是一个非常耗时的过程,重新应用每一个更改,重建,启动和测试;但是我的模式定义没有任何变化。 我有一个temp
浏览器,它涉及提供主要编辑表单。但保存操作似乎并非如此。
可悲的是,我还不完全了解base_edit
操作的机制,据我所知,它应该调用Archetypes.BaseObject.processForm
并隐含._renameAfterCreation
,所以我将不胜感激一些如何调试它的指示。 谢谢!
更新:我的产品configure.zcml
中有一些触发器,例如:
<subscriber
for=".content.portaltype.PortalType
Products.Archetypes.interfaces.IObjectInitializedEvent"
handler=".events.onInitPortalType"/>
...,在events.py
:
def onInitPortalType(self, event):
"""
Called after first edit of new objects?
"""
print '/// onInitPortalType(%(self)r, %(event)r)' % locals()
setInitialOwner(self, event)
setStateToPrivate(self, event)
但是,该事件似乎没有被触发,因为我无法在instance fg
会话中找到输出。
更新2:我注意到zope.event
已被固定到一个相当旧的版本(3.5.2
),所以我现在正在尝试更认真地更新到4.3.4(按照本指南)。这让我zope.event
v4.0.3,但现在我有一个版本冲突:
There is a version conflict.
We already have: zc.recipe.egg 1.3.2.
While:
Installing.
Getting section test.
Initializing section test.
Installing recipe zc.recipe.testrunner.
似乎在某处需要zc.recipe.egg < 2dev
,但我找不到它。
在原型上的 Plone 4.3.3 和 4.3.4 之间没有重大变化。Products.Archetypes从1.9.7更改为1.9.8,Products.ATContentTypes保留在同一版本上。
指针可以是:
- 有一个
_at_rename_after_creation
标志,默认情况下True
。这可以在内容类型class
上更改。 - 您的类型是否仍在
portal_factory
工具中激活?(Afaik 这应该对创建后的重命名没有影响 - 但谁知道呢:-)) - 有
Products.Archetypes.interfaces.IObjectInitializedEvent
订阅者吗? - 我曾经遇到的问题是,tmp id
portaltype.2015-04-23.1234567890
格式错误,AT 没有将其识别为 tmp id,因此它在创建后没有重命名它。AT用来检查id是否自动生成的方法 -> https://github.com/plone/Products.CMFPlone/blob/4.3.4/Products/CMFPlone/utils.py#L111 AFAIK问题是,meta_type和portal_type不再相同。