[Zend Framework] Créez facilement un flux RSS

Rédigé le 2010-10-11 20:54:00 par Blusky (Technos Web)
Dernière modification le

Salut les geeks!

Comme vous l'avez sans doute remarqué, ce blog n'est pas un Wordpress, ni un Joomla, ni tout autre CMS, mais a été codé à la main (je ne justifierai pas ce choix, disons qu'il s'agit la d'un challenge perso :D). J'ai utilisé, pour me simplifier la tâche, le superbe framework Zend Framework, et comme tout blog qui se respecte, j'ai attaché à celui-ci un flux RSS. Je vais donc expliquer dans cet article, comment cela a été codé.

1. Prérequis

Il s'agit là, de créer un flux RSS pour un site déjà conçu, donc une application web, déjà sous Zend Framework (où alors adaptez ce tuto avec seulement Zend/Feed.php), et possédant une base de données avec un squelette déjà établi.

2. Utilisation de Zend_Feed

Zend_Feed est un composant de la librairie Zend Framework. Il permet (entre autre) de générer le codage d'un flux RSS. Pour cela, on utilisera la méthode static :

$feed=Zend_Feed::importArray($array,$code)

$array est un tableau contenant les informations, et $code sera dans notre cas égale à 'rss'.

3. Contenu de $array

$array est un tableau contenant au minimum les éléments suivants : title, link, charset, description, author, email, copyright, generator, language et entries. Mis à part ce dernier, tous sont des String, dont il est simple de savoir comment les remplir. entries est un array(). Ce qui donne le code suivant (tiré de mon code source):

$array = array('title' => "Blusky.fr",
               'link' => 'http://www.blusky.fr/rss/',
               'charset' => 'utf8',
               'description' => "Le flux RSS du site de Blusky",
               'author' => 'Blusky',
               'email' => 'rss@blusky.fr',
               'copyright' => 'Creative Commons',
               'generator' => 'Zend Framework Zend_Feed',
               'language' => 'fr',
               'entries' => array());

4. Remplissage des entries

Maintenant que le squelette du flux est fait, il faut remplir avec vos données ! 99% de chances qu'elles viennent d'une base de données, cela donne donc:

$myDb = new Zend_Db_Table("ma_table");
$select = $myDb->select(); // + tout le reste de votre requete
$data = $myDb->fetchAll($select);

Puis, pour chaque élément, on l'insère dans entries ainsi :

foreach ($data as $elem) {
    $array['entries'][] = array('title' => $elem->titre,
                                'link' => $elem->link,
                                'description' => substr(strip_tags($elem->content),0,256).
                                                 ((strlen($elem->content)>256)?"...":""),
                                'content' => $elem->content);
}

Comme vous l'avez remarqué, on tronque le content dans description, ce n'est pas obligé, mais beaucoup plus simple à mettre en oeuvre :-)

5. Génération du flux

Rien de plus simple, il suffit d'envoyer la méthode send() ainsi :

$feed->send();

Si vous avez utilisé Zend Framework, et que vous suivez le design MVC, je vous donne une petite astuce: vous pouvez tout mettre dans le controller, pour cela, désactivez le layout ainsi:

$this->_helper->layout->disableLayout();

et finir l'action avec

exit();

Afin de ne pas devoir créer une vue :-)

Commentaires (3)


#12 Par Blount le 2011-03-04 21:02:53

Je commente tardivement, mais en cherchant des informations, je suis tombé ici.

Au lieu d'utiliser "exit", tu peux mettre :

$this->_helper->viewRenderer->setNoRender();

Derrière le "disableLayout".

De cette manière, tu laisse l'application se terminer correctement (plugin, etc.).


#13 Par Blusky le 2011-03-31 16:34:33

Bien vu !

Cependant je me demande maintenant (je débutais avec Zend et le MVC en php lors de la rédaction de cet article) si justement il ne vaut pas mieu mettre l'appel de la méthode Send (de l'objet RSS) dans la vue, et être ainsi mieux conforme aux recommendations MVC :-)

Sinon merci du consei !


#15 Par Erotique le 2011-08-17 14:48:23

Pour un site multilingue, il ne faut pas se tromper sur la langue du flux. Il faut utiliser des codes ISO 639 : http://fr.wikipedia.org/wiki/Liste_des_codes_ISO_639-1

Zend ne renvoie pas d'errreur en cas de mauvais code.

Ajout de commentaire