覆盖z3c.form中的CalendarDateConverter

时间:2012-11-29 11:21:02

标签: plone z3c.form

z3c.form注册这样的转换器:

<adapter
  factory=".converter.DatetimeDataConverter"
  />

是否可以使用overrides.zcml在Plone中覆盖此转换器?需要为overrides.zcml提供什么样的输入才能覆盖它?是否应该从.py代码中复制与定义相匹配的界面:

class DatetimeDataConverter(CalendarDataConverter):
    """A special data converter for datetimes."""
    zope.component.adapts(
        zope.schema.interfaces.IDatetime, interfaces.IWidget)

任何其他非猴子修补意味着覆盖z3c.converters?

1 个答案:

答案 0 :(得分:2)

我只需将新转换器注册到更具体的界面:

 <adapter
     factory=".myconverter.MyDatetimeDataConverter"
     for="zope.schema.interfaces.IDatetime
          z3c.form.interfaces.ITextWidget"
     />

我使用ITextWidget作为示例,将其注册到您希望使用自定义转换器的小部件。

覆盖使用相同的注册替换适配器。就像常规ZCML文件中的<adapter />注册一样,如果需要,它将采用它(多个)适应的接口以及它从工厂对象提供的接口,因此如果您使用{.adapts() 1}}在您自己的转换器上,您无需在<adapter />注册中重复该信息。