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?
答案 0 :(得分:2)
我只需将新转换器注册到更具体的界面:
<adapter
factory=".myconverter.MyDatetimeDataConverter"
for="zope.schema.interfaces.IDatetime
z3c.form.interfaces.ITextWidget"
/>
我使用ITextWidget
作为示例,将其注册到您希望使用自定义转换器的小部件。
覆盖使用相同的注册替换适配器。就像常规ZCML文件中的<adapter />
注册一样,如果需要,它将采用它(多个)适应的接口以及它从工厂对象提供的接口,因此如果您使用{.adapts()
1}}在您自己的转换器上,您无需在<adapter />
注册中重复该信息。