gpt4 book ai didi

overriding - 如何覆盖 Plone 事件订阅者

转载 作者:行者123 更新时间:2023-12-04 17:52:06 25 4
gpt4 key购买 nike

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

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

Unlike adapters, you cannot override an event subscriber by using a more specific interface. Each and every applicable event subscriber will be executed when an event is fired.



有人有窍门吗?

谢谢亚历克斯

最佳答案

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

本产品允许禁用 zcml 配置。

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

  • 在 setup.py
  • 中添加了“z3c.unconfigure”作为 install_requires
  • 使用 update_tracker_watchers 的新定义创建 event.py
  • 在 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"
    />

    关于overriding - 如何覆盖 Plone 事件订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14544614/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com