gpt4 book ai didi

plone - 如何在启动时最初加载 plone 站点时订阅

转载 作者:行者123 更新时间:2023-12-02 00:19:17 24 4
gpt4 key购买 nike

我想以编程方式进行一些注册,这些注册取决于存储在 plone.app.registry 中的数据。具体来说,我想将 menuItems 添加到对象的显示菜单中,这通常是通过 zcml 完成的。

这种“Plone 加载”事件的“标准”方法是什么?

我考虑过的方法是:

  • 在站点根目录上使用预遍历 Hook ,进行注册,然后设置某种标记以防止重新注册
  • 监听 zope 启动事件(如 zope.processlifetime.IProcessStarting),然后在 ZODB 中找到所有 Plone 站点并执行注册

最佳答案

我会使用一个事件处理程序来 Hook 站点遍历,并带有一个切换:

_menuItemsRegistered = set()

def beforeSiteTraverse(site, event, _handled=set()):
if site.getPhysicalPath() not in _handled:
registerMenuItems(site)
__handled.add(site.getPhysicalPath())

现在 registerMenuItems 将只为每个 Plone 站点执行一次,而且执行起来非常便宜。

如果每个实例只需要处理一个 Plone 站点,则可以(进一步)减少它;只需在第一次触发后取消订阅您的处理程序即可。

这比处理 IProcessStarting 事件效果更好,因为您必须先在每个 Plone 站点上设置本地注册表(调用 setSite)甚至访问注册表实用程序。

关于plone - 如何在启动时最初加载 plone 站点时订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11664925/

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