在Plone实例中,我有两个plone站点。 在其中一个,我有一个专门的产品。
我想在该产品中声明Products.PluggableAuthService.interfaces.events.IPrincipalCreatedEvent
的订阅者,该订阅者只会针对此plone网站触发。
我已尝试使用zcml:condition="installed my.product"
,但只测试是否可以导入,因此订阅者也可以访问其他plone网站。
将第二个plone站点移动到另一个实例不是一种选择。
感谢。
答案 0 :(得分:4)
在plone中,你有Browserlayer
的概念。
由于您可以通过通用设置安装浏览器层,因此您可以在每个plone站点上激活/停用它。
我会在订阅者中实现一个条件,它会检查已安装的浏览器层。
注意: Browserlayers在
REQUEST
上应用了一个before traverse hook。
订阅者的示例功能:
from my.package.interfaces import IMyPackageLayer
def my_function(obj, event):
if IMyPackageLayer.providedBy(obj.REQUEST):
# Do something
else:
# Do nothing
您可以通过以下方式在包中注册/创建浏览器:
创建interfaces.py
from zope.interface import Interface
class IMyPackageLayer(Interface):
"""A layer specific to my package
"""
在您的软件包资料中创建browserlayer.xml
<layers>
<layer name="my.package"
interface="my.package.interfaces.IMyPackageLayer" />
</layers>
浏览器示例来自plone.browserlayer readme