Расширение схемы с IBrowserLayerAwareExtender применяется ко всем сайтам Plone - PullRequest
0 голосов
/ 08 января 2020

У меня установлен продукт на одном сайте Plone, этот продукт изменяет видимость поля типа содержимого события.

Он использует IBrowserLayerAwareExtender, чтобы ограничить изменение только сайтом Plone, на котором продукт

Эта работа выполняется на сервере разработки, на котором сборка выполняется с помощью опцииvelop.cfg, но в производственном режиме уровень не учитывается, и все остальные Plone Site имеют это изменение.

Вот код:

schemaextender.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"/>

Это ошибка или я что-то упустил?

1 Ответ

0 голосов
/ 21 января 2020

ИМХО, это странно, это работает на вашей машине, а не на производстве. Я предполагаю, что браузер действительно есть на производственном сайте.

Вы можете проверить это, запустив следующий код в сеансе отладки на сервере:

>>> 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.

Я предполагаю, что он есть, поэтому его следует удалить.

Если это так, удалите его, используя from plone.browserlayer.utils import unregister_layer

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