Personal tools
Un Mondo di Newsletter (parte 2)

EasyNewsletter

Feb 15, 2012

Un Mondo di Newsletter (parte 2)

excursus sui prodotti per newsletter sviluppati per Plone

Continuiamo il nostro viaggio nel mondo delle Newsletter iniziato nella prima parte con l'analisi di Singing & Dancing.
Oggi prendiamo in esame un secondo prodotto che abbiamo utilizzato in diverse occasioni:

EasyNewsletter

nome prodotto: Products.EasyNewsletter
mantainer: Maik Derstappen
pagina ufficialehttp://plone.org/products/easynewsletter

Il pacchetto Products.EasyNewsletter si compone di 4 AT: “Newsletter”, “Issue”, “Subscriber” e “Template”.

 

L’oggetto “Newsletter” costituisce il canale, riguardante un determinato argomento o per una determinata zona del portale; gli oggetti “Issue” sono le singole mail che potranno essere inviate; “Subscriber” è un oggetto che identifica il singolo utente, non Plone, registrato al canale che riceverà le issue di notifica; “Template” è un AT per definire la resa grafica della parte di contenuto delle issue.

EasyNewsletter screenshot1

Infine è disponibile una portlet che permette la sottoscrizione ad un canale da parte di utenti anonimi andando a creare un subscriber.

Cosa ci piace

Sicuramente ci ha colpito la grande flessibilità nella gestione del templating che è configurabile sul singolo oggetto “Newsletter”. Questo permette di avere configurazioni indipendenti per ogni newsletter creata nel portale.

PRO
  • personalizzabile in ogni suo aspetto
  • nessun parametro di gestione generalizzato
  • invio ad utenti e gruppi Plone
  • progetto recente con margini di miglioramento

L’impostazione di header e footer viene effettuata tramite dei RichWidget, sia a livello di newsletter sia a livello delle singole issue, andando in questo caso a sovrascrivere le impostazioni definite a livello newsletter; è quindi facile per l’utente inserire testo formattato o immagini.

A livello di newsletter, invece, è possibile modificare aspetti come i CSS da applicare alle mail da spedire, inserendo stili che rendono personalizzabili le newsletter le une dalle altre; a seconda della sezione, si può avere una mail con sfondo bianco, giallo o nero.

La possibilità di scegliere una serie di gruppi o singoli utenti ci è sembrata molto utile per gestire più newsletter nello stesso portale; se si pensa, per esempio, ad un portale medico dove possiamo avere una decina di branche specialistiche, ognuna con il proprio gruppo (di soli lettori o redattori), ecco che usando una newsletter per ogni specializzazione si può facilmente provvedere all’invio solo alle persone interessate tramite la configurazione del gruppo a cui inviare.

Cosa non ci piace

Gli AT “Newsletter” e “Issue” sono stati creati come estensione degli oggetti “Collezione” e questo, secondo noi, porta più svantaggi che vantaggi.

CONTRO
  • ereditarietà dalle Collezioni
  • codice non molto semplice e tecnicamente migliorabile
  • non ha una coda per l’invio
  • non ha uno sviluppo costante

Gli svantaggi riguardano soprattutto l’usabilità per un utente redattore che, seppur conoscendo l’ambiente Plone ed il comportamento delle collezioni, potrebbe trovarsi in difficoltà a gestire criteri e sotto-criteri.

Sia l’oggetto “Newsletter” che i singoli oggetti “Issue” hanno a disposizione il tab “Criteri” e “Cercatori subordinati”, che sono da comandare attraverso la creazione di AT “Template” o della modifica del template di default. Per impostare la resa grafica della issue si hanno quindi quattro elementi principali: il testo che si va a scrivere nella issue; i file eventualmente contenuti all’interno dell’oggetto “Issue”; i risultati secondo i criteri della issue; i risultati secondo i criteri degli eventuali cercatori subordinati.

Il testo che si inserisce nella issue deve essere sempre visibile, mentre l’elenco dei risultati del cercatore e dei sotto-cercatori sono opzionali. A complicare la situazione intervengono il cercatore della newsletter e i suoi sotto-cercatori, i quali compaiono se non sovrascritti da cercatore e sotto-cercatori delle singole issue.

<tal:block tal:repeat="object context/queryCatalog">
    <h1 tal:content="object/Title">Title</h1>
    <p>
        <span tal:content="object/Description">Description</span>
    </p>
    <p>
        <a tal:attributes="href object/getURL">Please read on.</a>
    </p>
</tal:block>

<tal:block tal:repeat="subtopic context/getSubTopics">
    <h1 tal:content="subtopic/Title">Title</h1>

    <tal:block tal:repeat="object subtopic/queryCatalog">
        <h2 tal:content="object/Title">Title</h2>

        <p>
            <span tal:content="object/Description">Description</span>
        </p>
        <p>
            <a tal:attributes="href object/getURL">Please read on.</a>
        </p>
    </tal:block>
</tal:block>

 

A noi questa gestione non è piaciuta perché ci pare più frequente la possibilità di avere delle issue contenente un semplice testo piuttosto che un elenco di una collezione.
L’invio di una issue contenente i risultati di una collezione poteva essere risolta molto più facilmente creando un adapter per ENL, che sfruttasse il sistema del template per il contenuto, come abbiamo poi creato noi con la nostra estensione descritta sotto.

Estensioni: EasyNewsletterSendTo

Questa estensione che abbiamo sviluppato, ma non ancora rilasciato, è nata da un’idea molto semplice:

la maggior parte delle volte un redattore vuole inviare un contenuto del sito come newsletter invece di dover riscrivere informazioni su un evento o una notizia

Per questo motivo abbiamo pensato che sarebbe stato utile studiare un modo per creare un oggetto “Issue” a partire dalle informazioni presenti nei vari AT Plone.
Abbiamo per questo sviluppato una nuova action “Send to Newsletter” che permette ad un redattore di creare una issue in una o più newsletter nelle quali ha il permesso di operare.
La cosa più importante è il mapping dei campi dei vari AT Plone con quelli disponibili nell’AT “Issue” fatto tramite una serie di adapter; l’esempio sotto si riferisce a due funzioni usate per l’inserimento di un AT “Image” dentro il campo testuale della “Issue” .

 

def contentToDict(self):
    ''' Returns a dictionary with some field of the object '''
    kargs = {}
    kargs['title'] = self.context.Title()
    kargs['description'] = self.context.Description()
    kargs['text'] = self.manageText()
    kargs['text_text_format'] = 'text/x-html-safe'
    return kargs

def manageText(self):
    ''' aggregator of some field into text '''
    return '<p><img title="%s" alt="%s" src="%s" /></p>' %(self.context.Title(),
             self.context.Title(),
             self.context.absolute_url()+'/image_preview')

 

Un esempio, invece, di caso più particolare è quello dell’invito dell’AT “Topic” per cui abbiamo deciso di non andare a complicarci il lavoro cercando di inserire la vista delle collezioni dentro il campo di testo della issue; abbiamo invece sfruttato la possibilità di avere sotto-collezioni andando a copiare la collezione come oggetto figlio della issue (in questo caso diventa una sotto-collezione).
Per essere certi della resa grafica siamo anche andati ad utilizzare un nuovo template, inserito nel nostro pacchetto aggiuntivo, che mostra soltanto l’elenco delle sotto-collezioni in modo simile alla vista delle collezioni Plone.

Il tutto è corredato dalle possibilità di inviare il contenuto tramite più newsletter e di aggiungere un prologo, che viene utilizzato come descrizione all’inizio della mail generata.
Per il futuro pensavamo di migliorare questa estensione inserendo anche un’anteprima delle varie mail generate mostrando soprattutto la resa grafica, probabilmente differente, dovuta alle diverse personalizzazioni realizzate nelle varie newsletter.

To be continued...

Mirco & Andrea

Filed under: , ,
comments powered by Disqus