如何覆盖Plone事件订阅者

时间:2013-01-27 05:07:18

标签: override plone

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

此处http://plone.org/products/dexterity/documentation/manual/five.grok/core-components/events似乎无法实现:

  

与适配器不同,您无法使用更具体的界面覆盖事件订阅者。当事件被触发时,将执行每个适用的事件订阅者。

有人有诀窍吗?

谢谢Alex

2 个答案:

答案 0 :(得分:5)

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

此产品允许禁用zcml配置。

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

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

    <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