2011-06-19 26 views
5

Estoy intentando arreglar la navegación mensual de un portlet de calendario asignado para un administrador de portlet personalizado. Este gestor se llama desde una plantilla determinada página del navegador con:¿Cómo obtener la clase css de portlet-hash para un portlet de calendario asignado para un administrador de portlet personalizado?

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

Por desgracia el gerente no hace que un envoltorio con el hash para mí, así que estoy tratando de añadir manualmente una kssattr-portlethash clase css a la etiqueta <div> anterior para hacer que la navegación del mes funcione (refreshPortlet() lo necesita). He intentado esto:

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) 

Utilizando este código me pongo un hash, pero la navegación calendario todavía no funciona. ¿Cómo puedo acceder a la información del portlet, como gerente, categoría, clave y nombre, para calcularla, verdad?

Me gustaría tener el comportamiento descrito por column.pt de plone.app.portlets.browser.templates y su clase ColumnPortletManagerRenderer (portlets/manager.py) pero no lo hago Sé cómo hacer que mi administrador personalizado los proporcione (es decir, como lo hacen los administradores predeterminados).

+0

¿Puede dar algunos código para darnos una pista de dónde podemos ayudarlo? – marcosfromero

Respuesta

4

Usted necesita asegurarse de que tienen una PortletManagerRenderer y un EditPortletManagerRenderer instalado que sepa hacer hashes, tales como:

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') 

Dónde column.pt parece:

<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> 
Cuestiones relacionadas