如何覆盖Plone事件订阅者

Ale*_*lex 5 overriding plone

我需要用第二种产品扩展Plone产品(Products.Poi).在扩展产品中,我需要覆盖原始订户事件.我试图在override.zcml中订阅一个具有相同名称的事件,但第二个事件不会覆盖第一个事件,但所有两个事件都是execute.

这里http://plone.org/products/dexterity/documentation/manual/five.grok/core-components/events似乎是不可能的:

与适配器不同,您不能使用更具体的接口覆盖事件订阅者.当事件被触发时,将执行每个适用的事件订阅者.

有人有诀窍吗?

谢谢Alex

Ale*_*lex 5

Simone Orsi给了我一个解决方案:z3c.unconfigure.

此产品允许禁用zcml配置.

为了使用它,我在我的扩展Poi产品上执行了这一步:

  1. 在setup.py中添加了"z3c.unconfigure"作为install_requires
  2. 使用update_tracker_watchers的新定义创建event.py
  3. 在overrides.zcml中添加此行以取消配置Products.Poi.events.update_tracker_watchers并注册我的新事件

<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"
/>


van*_*eem 3

当您指定了 overrides.zcml 时,您还需要在 buildout 中注册 zcml override 吗?看一下: http: //developer.plone.org/components/zcml.html ?highlight=zcml#overrides 它会是这样的:zcml = my.package-overrides

此外,您可以尝试使用 z3c.unconfigure 包:http://pypi.python.org/pypi/z3c.unconfigure