Чтобы предотвратить получение портлета и сохранить возможность добавления портлета, вы можете добавить прослушиватель событий при создании содержимого, которое автоматически блокирует получение.
Примерно так:
<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 в моем непроверенном коде ... так что теперь проверено