我需要使用第二种产品扩展Plone产品(Products.Poi)。 在扩展产品中,我需要覆盖原始订户事件。 我试图在override.zcml中订阅一个具有相同名称的事件,但第二个事件不会覆盖第一个事件,但所有两个事件都是执行。
此处http://plone.org/products/dexterity/documentation/manual/five.grok/core-components/events似乎无法实现:
与适配器不同,您无法使用更具体的界面覆盖事件订阅者。当事件被触发时,将执行每个适用的事件订阅者。
有人有诀窍吗?
谢谢Alex
答案 0 :(得分:5)
Simone Orsi给了我一个解决方案:z3c.unconfigure。
此产品允许禁用zcml配置。
要使用它,我在我的Poi产品上执行了这一步:
<include package="z3c.unconfigure" file="meta.zcml" />
<unconfigure>
<subscriber
for="Products.Poi.interfaces.ITracker
Products.Archetypes.interfaces.IObjectEditedEvent"
handler="Products.Poi.events.update_tracker_watchers"
/>
</unconfigure>
<subscriber
for="Products.Poi.interfaces.ITracker
Products.Archetypes.interfaces.IObjectEditedEvent"
handler=".events.update_tracker_watchers"
/>
答案 1 :(得分:3)
当你指定了overrides.zcml时,还需要在buildout中注册zcml覆盖?看看:http://developer.plone.org/components/zcml.html?highlight=zcml#overrides它类似于:zcml = my.package-overrides
此外,您可以尝试使用z3c.unconfigure包:http://pypi.python.org/pypi/z3c.unconfigure