Блокирование контекстного портлета по умолчанию в plone - PullRequest
0 голосов
/ 24 августа 2010

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

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

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

Но, увы, это не похоже на работу. Есть предложения?

Ответы [ 2 ]

0 голосов
/ 27 ноября 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)
0 голосов
/ 01 сентября 2010

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

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

...