Messaggi nelle pagine Plone da codice Python
medio
Da sempre Plone dialoga con l'utente che lo sta usando, indicando azioni eseguite o problemi avvenuti nella zona alta della pagina, proprio sopra al titolo del contesto.
Fino alla precedente versione il modo di comunicare questi messaggi era piuttosto "rozzo", sebbene semplice ed efficace: veniva aggiunta all'URL una querystring apposita, che il template sapeva di dover renderizzare come messaggio..
Con Plone 3 la cosa e' (finalmente) cambiata, e non si deve piu' ricorrere a qualcosa così evidente e poco flessibile.
Il servizio plone_utils, infatti, mette a disposizione una chiamata che permette di aggiungere tutti i messaggi che vogliamo, indicandone anche la tipologia: possiamo vedere se si tratta di una *info*, di un *warning* o di un *error*.
Come? Ecco degli esempi:
In un controlled script di portal_skins (come ad esempio event_edit.cpy, presente in plone_form_scripts):
: .. context.plone_utils.addPortalMessage(_(u'Error saving event.'), 'error') .. context.plone_utils.addPortalMessage(_(u'Event changes saved.')) ..
Mentre in una chiamata effettuata da normale codice Python (ad esempio un metodo di un tool su file system):
:.. plone_utils = getToolByName(self, 'plone_utils') msg = u"Fatto. tutti gli oggetti sono stati elaborati." plone_utils.addPortalMessage(msg, request=self.REQUEST) ..
Si noti che nel caso in cui la chiamata avvenga da codice su filesystem è necessario effettuare il bind della REQUEST per permettere al sistema di annotare il nostro messaggio.
Ciò che avviene in fase di presentazione dei messaggi è semplicemente che il template effettua la chiamata plone_utils.showPortalMessages, capace di estrarre tutti i messaggi annotati, i quali verranno così renderizzati.