2

z3c.form registers a converter like this:

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

Is it possible to override this converter in Plone using overrides.zcml? What kind of input one needs to give for overrides.zcml to override it? Should one copy interface matching definitons from .py code:

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

Any other non-monkey-patching means to override z3c.converters?

4

1 回答 1

2

我只需为更具体的接口注册新转换器:

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

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

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

于 2012-11-29T14:50:00.663 回答