模式扩展器,IBrowserLayerAwareExtender应用于所有Plone站点

模式扩展器,IBrowserLayerAwareExtender应用于所有Plone站点,plone,plone-4.x,Plone,Plone 4.x,我在一个Plone站点上安装了一个产品,这个产品改变了事件内容类型字段的可见性 它使用IBrowserLayerAwareExtender将更改限制在仅安装产品的Plone站点 这项工作是在开发服务器上进行的,在开发服务器上使用develope.cfg选项进行构建,但在生产中,该层不受尊重,所有其他Plone站点都有此更改 代码如下: SchemaXtender.py: class EventModifier(object): """ Masque certains ch

我在一个Plone站点上安装了一个产品,这个产品改变了事件内容类型字段的可见性

它使用IBrowserLayerAwareExtender将更改限制在仅安装产品的Plone站点

这项工作是在开发服务器上进行的,在开发服务器上使用develope.cfg选项进行构建,但在生产中,该层不受尊重,所有其他Plone站点都有此更改

代码如下:

SchemaXtender.py:

    class EventModifier(object):
    """
    Masque certains champs inutiles pour le projet
    """
    implements(ISchemaModifier, IBrowserLayerAwareExtender)
    adapts(IATEvent)
    layer = IBswMonasticLayer

    def __init__(self, context):
        self.context = context

    # noinspection PyMethodMayBeStatic
    def fiddle(self, schema):
        """

        :param schema:
        :return:
        """
        schema['attendees'].widget.visible = {'edit': 'invisible', 'view': 'invisible'}
        schema['location'].widget.label = _(u'Adresse')
        return schema
configure.zcml:

<adapter for="Products.ATContentTypes.interface.IATEvent"
             provides="archetypes.schemaextender.interfaces.ISchemaModifier"
             factory=".schemaextender.EventModifier"
             name="bsw.monastic.schemaextender.EventModifier"/>


这是一个bug还是我遗漏了什么?

我想这很奇怪,它在你的开发机器上工作,而不是在生产中。我想browserlayer确实在生产现场

您可以通过在服务器上的调试会话中运行以下代码来检查这一点:

>>> from zope.component.hooks import setSite
>>> plone = app.path.to.plone.site
>>> setSite(plone)  # Setup component registry
>>> from plone.browserlayer.utils import registered_layers
>>> registered_layers()
[...]  # Bunch of layer interface active on the plone site.
我想它在那里,所以你应该把它拿走

如果是这样,请使用plone.browserlayer.utils import unregister\u layer中的
将其删除

>>> from plone.browserlayer.utils import unregister_layer
>>> unregister_layer(layername)
>>> import transaction
>>> transaction.commit()