如何声明仅为一个plone站点启用的订户?

时间:2015-04-28 12:44:42

标签: plone

在Plone实例中,我有两个plone站点。 在其中一个,我有一个专门的产品。

我想在该产品中声明Products.PluggableAuthService.interfaces.events.IPrincipalCreatedEvent的订阅者,该订阅者只会针对此plone网站触发。

我已尝试使用zcml:condition="installed my.product",但只测试是否可以导入,因此订阅者也可以访问其他plone网站。

将第二个plone站点移动到另一个实例不是一种选择。

感谢。

1 个答案:

答案 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

您可以通过以下方式在包中注册/创建浏览器:

  1. 创建interfaces.py

    from zope.interface import Interface
    
    class IMyPackageLayer(Interface):
        """A layer specific to my package
        """
    
  2. 在您的软件包资料中创建browserlayer.xml

    <layers>
        <layer name="my.package"
           interface="my.package.interfaces.IMyPackageLayer" />
    </layers>
    
  3. 浏览器示例来自plone.browserlayer readme