Générer un flux Atom ou Rss avec Zend_Feed_Writer

logo-zend-frameworkTesté pour Zend Framework v1.11

Préambule

Pour constituer un flux xml de type atom ou rss, Zend_Feed_Writer repose sur 2 choses : un conteneur et un « renderer », ou moteur de rendu ou rendu.

Pour un flux simple, le travail principal sera de remplir le conteneur avec des données. Jouer avec le rendu n’est pas utile.

Le résultat attendu pour un flux atom est du genre suivant

<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title type="text">Titre</title>
  <link rel="self" type="application/atom+xml" href="/"/>
  <id>Ze Id</id>
  <entry>
    <title>entrée</title>
    <link rel="alternate" type="text/html" href=""/>
  </entry>
</feed>

Créer un nouveau flux

On se trouve dans notre controlleur préféré et l’action par défaut disons : IndexController/IndexAction

On commence par créer un nouveau conteneur via l’objet Zend_Feed_Writer_Feed. Cet objet contient un tableau des entrées du flux ($_entries), ainsi qu’un autre tableau ($_data) des données relatives au flux : title, link, id…

Cette notion n’est pas très importante pour le moment mais le devient dès qu’on commence à ajouter de nouvelles balises, modifier des arguments, etc.

Concernant les entrées, même principe, un conteneur et un renderer.

Ainsi ce premier flux peut être créé de la façon suivante: remplissage des conteneurs puis export en précisant le type (atom ou rss). La méthode export() déclenche les rendus et renvoie une chaîne du xml généré. La dernière ligne s’occupe de faire la réponse HTTP.

        $f = new Zend_Feed_Writer_Feed();
        $f->setTitle('Titre');
        $f->setFeedLink($this->_helper->FullUrl('','','catalog'), 'atom');
        $f->setId('Ze Id');
        
        $e = $f->createEntry();
        $e->setTitle("Entrée");
        $e->setLink('/');
        $f->addEntry($e);
        
        $out = $f->export('atom');
        
        Zend_Feed::importString($out)->send();

Et voila !

Attention toutefois, si on utilise le modèle MVC, il faut empêcher de charger la vue correspondant à l’action. Pour cela, dans le controlleur, créer la méthode preDispatch avec le contenu suivant.

    /* Désactive le layout pour permettre un envoi brut de xml */
    public function preDispatch() {
        $this->_helper->layout()->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);
    }

Rendez-vous au prochain épisode pour jouer avec le rendu et ses plugins.

1 pensée sur “Générer un flux Atom ou Rss avec Zend_Feed_Writer”

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *