Plone: override della classe renderer di una portlet

modificare una portlet plone senza crearne una nuova

Quante volte avete avuto la necessità di modificare il template o il comportamento di un metodo della classe Renderer di una portlet "standard"?

Il metodo che io ho sempre utilizzato era quello di creare una nuova portlet le cui classi ereditassero dalla portlet che volevo modificare, e farne gli override dei metodi.
C'è un modo più pulito per fare questo, e ci viene in aiuto il configure.zcml:

  1. modifica del template di una portlet

    Come modificare il template della portlet events

      <plone:portletRenderer
          portlet="plone.app.portlets.portlets.events.IEventsPortlet"
          template="templates/events.pt"
          for="*"
          layer=".interfaces.IThemeSpecific"  />
    
  2. overrides di un metodo della classe Renderer

    Come modificare la classe Renderer della portelt events

      <plone:portletRenderer
          portlet="plone.app.portlets.portlets.events.IEventsPortlet"
          class=".EventsPortlet.Renderer"
          for="*"
          layer=".interfaces.IThemeSpecific"
      />

per fare ciò è necessario però includere nel vostro configure il pacchetto in cui risiede la portlet che volete modificare, nel mio caso plone.app.portlets

    <include package="plone.app.portlets" />

N.B.
per fare in modo che le modifiche apportate siano locali al vostro portale è buona regola legare le dichiarazioni al layer del tema o ad uno da voi creato.

layer=".interfaces.IThemeSpecific"

Per saperne di più

 

Share this on

Share |

On same topics

Commenti

comments powered by Disqus