Come rendere disponibili i contenuti di un modulo alla newsletter

A breve verrà rilasciata la classe newsletter, ecco come renderle disponibili i contenuti di altri moduli.

In generale una newsletter può essere composta da testo digitato sul momento e da contenuti del sito che vengono portati alla visione degli iscritti. Qui vediamo come rendere disponibili i contenuti di altri moduli per l'importazione al momento della creazione di una newsletter.

La classe newsletter sarà presto disponibile al download come repository su github.

Essa permette di inviare delle email a degli utenti iscritti per promuovere l'inserimento di nuovi contenuti sul vostro sito.

In particolare sarà possibile includere in modo semplice i contenuti di altri moduli (news, eventi, etc...) all'interno della newsletter.

Vediamo cosa bisogna fare per permettere ad un modulo di esportare i propri contenuti.

Implementare un metodo di nome systemNewsletterList

Tale metodo deve occuparsi di fornire un array di elementi utilizzati per generare una lista dei contenuti importabili all'interno della newsletter.

La variabile ritornata dal metodo dovrà dunque essere un array di array associativi chiave=>valore, dove le chiavi dipendono chiaramente dal tipo di modulo in questione (label, data, etc...) e devono essere esaustive, cioè rendere bene l'idea di quale contenuto si stia parlando. L'unica chiave obbligatoria deve essere id che deve identificare univocamente il contenuto, e viene utilizzato dalla classe newsletter per costruire un codice univoco per l'inserimento.

Vediamo un esempio per il modulo news:

 

public function systemNewsletterList() { 
  $news = newsItem::get($this, array('private'=>true, 'order'=>'date DESC, insertion_date DESC', 'limit'=>array(0, $this->_newsletter_news_number)));
  $items = array();
  foreach($news as $n) { 
    $items[] = array( _('id') => $n->id, _('titolo') => htmlChars($n->ml('title')), _('privata') => $n->private ? _('si') : _('no'), _('pubblicata') => $n->published ? _('si') : _('no'), _('data') => dbDateToDate($n->date), );
  }
  return $items;
}

 

Implementare il metodo systemNewsletterRender

Quando il testo della newsletter viene parserizzato, i codici che rappresentano contenuti esterni vengono processati, ed il modulo in questione deve fornire la sua rappresentazione del contenuto associato con l'id di riferimento. Pertanto tale metodo, preso in pasto l'id del contenuto, deve ritornare il codice html da inserire all'interno della newsletter.

Ad esempio per le news:

 

public function systemNewsletterRender($id) { 
  $n = new newsItem($id, $this);
  preg_match_all("#{{[^}]+}}#", $this->_newsletter_news_code, $matches); 
  $buffer = $this->parseTemplate($n, $this->_newsletter_news_code, $matches); 
  return $buffer; 
}

 

In questo caso abbiamo un template definito da opzioni che viene parserizzato, comunque il risultato ($buffer) restituito dal metodo è una porzione di codice html che stampa il contenuto richiesto nel formato desiderato (in questo caso deciso da opzioni, ma nulla vieta di staticizzarlo).

Summary

Come abbiamo visto è quindi sufficiente implementare due metodi all'interno di una classe controller di un modulo per permetterne l'importazione dei contenuti all'interno della newsletter.