如何声明一个只对一个 plone 站点启用的订阅者?
How to declare a subscriber that will be enable for only one plone site?
在 Plone 实例中,我有两个 plone 站点。
其中之一,我有专门的产品。
我想在该产品中为 Products.PluggableAuthService.interfaces.events.IPrincipalCreatedEvent
声明一个订阅者,该订阅者将仅为该克隆站点触发。
我试过 zcml:condition="installed my.product"
但它只测试它是否可以导入,所以订阅者也可以用于另一个 plone 站点。
将第二个克隆站点移动到另一个实例不是一个选项。
谢谢。
在plone中你有Browserlayer
的概念。
由于您可以通过通用设置安装浏览器层,因此您可以 activate/deactivate 每个克隆站点。
我会在订阅者中实现一个条件,它会检查是否安装了浏览器层。
Note:
Browserlayers are applied on the REQUEST
with a before traverse hook.
订阅者的示例函数:
from my.package.interfaces import IMyPackageLayer
def my_function(obj, event):
if IMyPackageLayer.providedBy(obj.REQUEST):
# Do something
else:
# Do nothing
您可以通过以下方式在您的包中 register/create 浏览器层:
创建一个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
在 Plone 实例中,我有两个 plone 站点。 其中之一,我有专门的产品。
我想在该产品中为 Products.PluggableAuthService.interfaces.events.IPrincipalCreatedEvent
声明一个订阅者,该订阅者将仅为该克隆站点触发。
我试过 zcml:condition="installed my.product"
但它只测试它是否可以导入,所以订阅者也可以用于另一个 plone 站点。
将第二个克隆站点移动到另一个实例不是一个选项。
谢谢。
在plone中你有Browserlayer
的概念。
由于您可以通过通用设置安装浏览器层,因此您可以 activate/deactivate 每个克隆站点。
我会在订阅者中实现一个条件,它会检查是否安装了浏览器层。
Note: Browserlayers are applied on the
REQUEST
with a before traverse hook.
订阅者的示例函数:
from my.package.interfaces import IMyPackageLayer
def my_function(obj, event):
if IMyPackageLayer.providedBy(obj.REQUEST):
# Do something
else:
# Do nothing
您可以通过以下方式在您的包中 register/create 浏览器层:
创建一个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