当我使用portal_factory
工具创建类型的实例时,它似乎忽略了我指定的覆盖base_edit
的视图。
以下是我的设置:
- 类型工具中从
edit
到base_edit
的别名 - 呈现视图的视图类
- ZCML,它将视图类挂接到适当的接口
- 实现适当接口的内容类
我知道我覆盖的base_edit
视图可以工作,因为它渲染:
- 一旦创建了对象,它就会进行渲染
- 当我禁用该类型的
portal_factory
工具时
当我使用另一个名称(如custom_edit
)时,它也会呈现覆盖的视图,尽管portal_factory
工具中启用了该类型。
将别名更改为@@base_edit也可以。通过这种方式,zope遍历进行适配器查找,而不是属性访问,并且将使用您的编辑视图。
afaik,@@强制进行适配器查找,没有@@,调用通过获取的第一个对象,然后调用适配器
cc@jurejan
您不需要自定义base_edit.cpt
,只需创建一个名为yourtypenamenormalized_edit.pt
的新CMF皮肤模板,其中"yourtypenamenormalized"是您的portal_type名称,小写且不带空格。在应用所有默认宏之前,原始的Archetype base_edit.cpt将查找以这种方式调用的模板。
之后,我建议您用默认模板edit_macro.pt中的所有代码填充这个新模板,然后开始应用您的更改。
通常,您要覆盖的唯一宏是正文宏。