如何使用portal_factory覆盖类型的'base_edit'视图?



当我使用portal_factory工具创建类型的实例时,它似乎忽略了我指定的覆盖base_edit的视图。

以下是我的设置:

  1. 类型工具中从editbase_edit的别名
  2. 呈现视图的视图类
  3. ZCML,它将视图类挂接到适当的接口
  4. 实现适当接口的内容类

我知道我覆盖的base_edit视图可以工作,因为它渲染:

  1. 一旦创建了对象,它就会进行渲染
  2. 当我禁用该类型的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中的所有代码填充这个新模板,然后开始应用您的更改。

通常,您要覆盖的唯一宏是正文宏。

最新更新