Bookmark and Share
Document Actions

Portlet renderers
medio

Personalizzare il portlet renderer su Plone 3

Le portlets in Plone 3 non sono molto differenti dalle viewlet, ma consistono in un componente persistente, il portlet assignment, contenente la configurazione del portlet, che viene generato usando un portlet renderer. Per la personalizzazione dell'aspetto, devi agire sul portlet renderer.

Dato che i portlet renderer possono incorporare una logica complessa e poggiare su qualche specifica tecnica di registrazione, Plone offre una nuova direttiva ZCML - <plone:portletRenderer /> - che rende la configurazione dei portlet renderers un po' più semplice. Diversamente dalla customizzazione che abbiamo visto per risorse di tipo browser standard, un portlet renderer personalizzato solo-template userà in realtà la classe di visualizzazione renderer (come per la variabile viewlet) che è stata usata per registrare il portlet renderer originale.

In plone.app.portlets, sotto portlets/configure.zcml, puoi trovare questa definizione per il portlet Recent:

<plone:portlet
name="portlets.Recent"
interface=".recent.IRecentPortlet"
assignment=".recent.Assignment"
renderer=".recent.Renderer"
addview=".recent.AddForm"
editview=".recent.EditForm"
/>

Supponiamo di volerlo personalizzare con un nuovo template. Il template di default (come citato dalla classe Renderer in recent.py) è recent.pt nella stessa directory. Copiandolo nel nostro pacchetto, possiamo agire come segue:

<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:plone="http://namespaces.plone.org/plone"
i18n_domain="example.customization">

<!-- We need to include the package of the portlets we are customising -->
<include package="plone.app.portlets" />

...

<plone:portletRenderer
portlet="plone.app.portlets.portlets.recent.IRecentPortlet"
layer=".interfaces.IExampleCustomization"
template="mostly_recent.pt"
/>

</configure>

Notiamo che stiamo esplicitamente includendo il pacchetto plone.app.portlets nell'elaborazione ZCML, dato che stiamo ora usando implicitamente la sua classe portlet renderer. Definiamo allora un nuovo portlet renderer con un template personalizzato, per il nostro nuovo layer. E' anche possibile usare l'attributo for per customizzare in un particolare tipo di contesto, o l'attributo view per personalizzare in una particolare visualizzazione, come con le viewlets.

Al posto di usare un template personalizzato, potremmo usare una classe renderer completamente nuova. Guardane l'implementazioni in plone.app.portlets per capire come funziona. Da notare infine che diversamente dalle viste e dalle viewlet, i portlet renderer supportano o template o classi, ma non entrambi.

 
by Fabrizio Reale last modified 2008-05-02 18:05
Contributors: Alice Narduzzo