Удалить все портлеты по всему сайту в Plone - PullRequest
1 голос
/ 27 сентября 2011

Каков наилучший (или самый простой) способ удаления портлетов всего сайта в plone 4.x?

Ответы [ 2 ]

1 голос
/ 27 января 2015

Я думаю, вы сделали небольшую опечатку:

del assignment_mapping['assignment_mapping']

должно быть:

del assignment_mapping[i]
1 голос
/ 27 сентября 2011

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

1 - создать вид браузера , связанный с корнем сайта

2 - добавить это:

from Products.Five import BrowserView
from Products.CMFCore.utils import getToolByName
from zope.component import getMultiAdapter
from plone.portlets.interfaces import IPortletManager
from plone.portlets.interfaces import IPortletAssignmentMapping
from plone.portlets.interfaces import ILocalPortletAssignable

class MyView(BrowserView):

    def __call__(self):
        ctool = getToolByName(self.context, 'portal_catalog')
        all_brains = ctool.searchResults()

        for i in all_brains:
            obj = i.getObject()
            if not ILocalPortletAssignable.providedBy(obj):
                continue
            for manager_name in ('plone.leftcolumn','plone.rightcolumn'):
                manager = getUtility(IPortletManager, name=manager_name)
                assignment_mapping = getMultiAdapter((obj, manager), 
                                                       IPortletAssignmentMapping)
                    for i in assignment_mapping.keys():
                        del assignment_mapping['assignment_mapping']

Обычно извлечение всех объектов не очень хорошая вещь, поэтому вам следует тщательно оценить количество содержимого и локальных портлеров. Тем не менее, этот путь немного агрессивен, но он сделает свою работу.

...