4

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

这是我的设置:

  1. 类型工具中的别名 from editto base_edit
  2. 呈现视图的视图类。
  3. ZCML 将视图类挂钩到适当的接口。
  4. 实现适当接口的内容类。

我知道我的覆盖base_edit视图有效,因为它呈现:

  1. 一旦创建了对象,它就会呈现。
  2. 当我禁用该portal_factory类型的工具时。

当我使用另一个名称时,custom_edit它也会呈现被覆盖的视图,尽管在portal_factory工具中启用了该类型。

4

2 回答 2

3

您不需要自定义base_edit.cpt,您只需创建一个名为 的新 CMF 皮肤模板yourtypenamenormalized_edit.pt,其中“yourtypenamenormalized”是您的 portal_type 名称小写且不包含空格。原始 Archetype base_edit.cpt将在应用所有默认宏之前查找以这种方式调用的模板。

之后,我建议您使用默认模板中的所有代码填充这个新模板,即edit_macro.pt,然后开始应用您的更改。

通常,您要覆盖的唯一宏是主体宏。

于 2013-08-17T10:37:31.730 回答
3

Changing the alias to @@base_edit works too. this way zope traversing makes an adapter lookup instead of attribute access and your edit view will be used.

afaik the @@ forces an adapter lookup, without @@ the first object thru acquisition is called and then an adapter

cc @juriejan

于 2013-09-05T20:51:37.677 回答