Блокировка контекстного портлета по умолчанию в plone

У меня есть собственный менеджер портлетов, и я хотел бы по умолчанию внести в черный список (также известный как блок) контекстные (также известные как родительские) портлеты. Я нашел несколько методов, но они либо требуют определенного местоположения (то есть не для всего сайта), либо будут работать только в том случае, если я нахожусь в пакете, отличном от того, где определен менеджер портлетов (setuphanders.py запускается до portlets.xml). импортирован, и поэтому менеджер портлетов еще не существует), что не является исполнителем.

Что я действительно хотел бы сделать, так это использовать синтаксис черного списка genericSetup в portlets.xml с '*' для местоположения следующим образом:

<blacklist
  manager="custom.portletmanager"
  location="*"
  category="context"
  status="block"
  />

Но, увы, похоже, это не работает. Какие-либо предложения?


person chrism    schedule 24.08.2010    source источник


Ответы (2)


Возможно, вы можете переопределить некоторые разрешения для портлета (возможно, в overrides.zcml), требующие несуществующего разрешения?

Кроме того, существует пакет z3c.unconfigure, который может полностью отменить регистрацию портлета.

person Ivo van der Wijk    schedule 01.09.2010

Возможно, лучше поздно, чем никогда: используя это в __init _ _ вашего PortletManager, вы устанавливаете по умолчанию для наследования значение false, но вы все равно можете переопределить его TTW. (Этот подход не распространяется на две другие вещи, которые уже имеют троичную семантику «блокировать/показать/наследовать», поэтому мы не можем отличить значение по умолчанию от значения, установленного пользователем, и __init _ _ вызывается каждый раз .)

def __init__(self, context, request, view, manager):

    ColumnPortletManagerRenderer.__init__(self, context, request, view, manager)
    assignable = getMultiAdapter((self.context, self.manager,), 
                                 ILocalPortletAssignmentManager)
    if assignable.getBlacklistStatus(CONTEXT_CATEGORY)==None:
        # hack: for CONTEXT, it's a binary flag.
        # Nevertheless, getBlacklistStatus returns ternary True/False/None.
        # None should be the creation default.
        assignable.setBlacklistStatus(CONTEXT_CATEGORY, True)
person Ulrich Schwarz    schedule 26.11.2010