Как получить класс css portlet-hash для портлета Calendar, назначенного для настраиваемого менеджера портлетов? - PullRequest
5 голосов
/ 20 июня 2011

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

<div id="calendar"
    tal:content="structure provider:my.custom.portletmanager" />

К сожалению, менеджер не отображает для меня оболочку с хэшем, поэтому я пытаюсь вручную добавить kssattr-portlethash css класс к указанному выше тегу <div>, чтобы обеспечить работу месяца (для этого нужна refreshPortlet () ).Я попробовал это:

from plone.portlets.utils import hashPortletInfo
class SectionHomeView(BrowserView):
    """SectionHome browser view
    """
    implements(ISectionHomeView)

    def __init__(self, context, request):
        self.context = context
        self.request = request

    @property
    def getHash(self):
        info = dict(manager = 'my.custom.portletmanager',
                    category = 'context',
                    key = '/my-section',
                    name = 'mycalendar',
                   )
        return hashPortletInfo(info)

Используя этот код, я получаю хэш, но навигация по календарю все еще не работает. Как я могу получить доступ к информации о портлете, такой как менеджер, категория, ключ и имя, чтобы правильно ее вычислить?

Мне бы хотелось, чтобы поведение описывалось column.pt из plone.app.portlets.browser.templates и его класс ColumnPortletManagerRenderer ( portlets / manager.py ), но я не знаю, как сделатьмой пользовательский менеджер предоставляет их (то есть: как это делают менеджеры по умолчанию).

1 Ответ

4 голосов
/ 27 июня 2011

Необходимо убедиться, что у вас установлены PortletManagerRenderer и EditPortletManagerRenderer, которые знают, как отображать хэши, например:

class MyCustomPortletManagerRenderer(ColumnPortletManagerRenderer) :
    """ This custom version of ColumnPortletManagerRenderer points to a new 
    template so that HTML can be customised. 
    """
    adapts(Interface, IThemeSpecific, IBrowserView, IMyCustomPortletManager)
    template = ViewPageTemplateFile('column.pt')

    def can_manage_portlets(self):
        context = self._context()
        if not ILocalPortletAssignable.providedBy(context):
            return False
        mtool = getToolByName(context, 'portal_membership')
        return mtool.checkPermission("Portlets: Manage portlets", context)

class MyCustomEditPortletManagerRenderer(ContextualEditPortletManagerRenderer):
    """To allow edit support of the above.
    """
    adapts(Interface, IThemeSpecific, IManageContextualPortletsView, IMyCustomPortletManager)
    template = ViewPageTemplateFile('edit-column.pt')

Где column.pt выглядит так:

<tal:block repeat="portlet options/portlets">
<div tal:attributes="class string:portletWrapper kssattr-portlethash-${portlet/hash};"
     tal:content="structure python:view.safe_render(portlet['renderer'])" />
</tal:block>
...