Назначение портлета для конкретного типа содержимого - PullRequest
5 голосов
/ 15 сентября 2011

Я разрабатываю тип контента для Plone 4 и хотел бы заблокировать все пользовательские, групповые и контекстные портлеты, которые он может унаследовать от своего родительского объекта.На данный момент я полностью сбит с толку документацией - в файле portlets.xml <blacklist/>, похоже, касается только блокирования по пути.<assignment/> похоже на то, что я хочу, но кажется слишком конкретным - я не хочу управлять назначением для всех возможных портлетов для моего типа контента.

Есть подсказки, которые я обнаружил, что настройкаМенеджер портлетов ILeftColumn и IRightColumn специфичен для типа контента, но я не могу найти хороших примеров.У кого-нибудь есть намеки или предложения?Я чувствую, что упускаю что-то очень простое.

Ответы [ 2 ]

6 голосов
/ 15 сентября 2011

Чтобы предотвратить получение портлета и сохранить возможность добавления портлета, вы можете добавить прослушиватель событий при создании содержимого, которое автоматически блокирует получение.

Примерно так:

    <subscriber
        for="my.package.interfaces.IMyContent
             zope.app.container.interfaces.IObjectAddedEvent"                 
handler=".subscribers.blockPortletsUpponMyContentCreation"
                  />

и чем это сделать:

from zope.component import getMultiAdapter, getUtility
from plone.portlets.interfaces import IPortletManager
from plone.portlets.interfaces import ILocalPortletAssignmentManager
from plone.portlets.constants import USER_CATEGORY
from plone.portlets.constants import GROUP_CATEGORY
from plone.portlets.constants import CONTENT_TYPE_CATEGORY
from plone.portlets.constants import CONTEXT_CATEGORY

def blockPortletsUpponMyContentCreation(mycontent, event):
    for manager_name in ('plone.leftcolumn','plone.rightcolumn'):
        manager = getUtility(IPortletManager, name=manager_name)
        assignable = getMultiAdapter((mycontent, manager,), ILocalPortletAssignmentManager)
        for category in (GROUP_CATEGORY, CONTENT_TYPE_CATEGORY,CONTEXT_CATEGORY,USER_CATEGORY):
            assignable.setBlacklistStatus(category, 1)

Примечание: этот код основан на представлении управления plone.app.portlet

Редактировать 19/08/2011: включеноисправления, предложенные @will в моем непроверенном коде ... так что теперь проверено

1 голос
/ 15 сентября 2011

Выполните присвоение вашему типу портала в прямом эфире на сайте через Sitesetup (controlpanel) -> Типы -> «Управление портлетами, назначенными этому типу контента».

Затем экспортируйте конфигурацию через ZMI -> portal_setup -> Export-Tab -> выберите «Portlets» -> нажмите «export» внизу.

Извлеките файлы types / YourType.xml и скопируйте соответствующие части в профилях вашего пакета / default / types / YourType.xml.

...