Messaggi nelle pagine Plone da codice Python
Plone dialoga con l'utente che lo sta usando da sempre, 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 quei 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 di così evidente e poco flessibile.
il servizio plone_utils mette a disposizione una chiamata che permette di aggiungere tutti i messaggi che vogliamo, indicando anche 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 es. 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 (es. 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 avviene da codice su file system è necessario effettuare il bind della REQUEST per permettere al sistema di annotare il nostro messaggio.
quello che avviene in fase di presentazione dei messaggi è che il template effettua la chiamata plone_utils.showPortalMessages, capace di estrarre tutti i messaggi annotati, che verranno così renderizzati..