NANANE DEVELOPPEMENT WEB JQUERY MAGENTO ZEND

CONTACT
RSS

ZF – Créer un flux RSS avec Zend_Feed

Les flux rss sont généralement créés automatiquement en fonction de vos actualités pour qu’un utilisateur l’utilise sur son agrégateur RSS (Google Reader par exemple). Le Zend Framework permet de les générer en respectant le standard RSS.

On va partir du principe où les informations propres à tout le site sont stockées dans des fichiers de configurations ini et les informations récupérées dans le flux (ici les news), dans la base de données.

Les fichiers de configuration

Pour cet exemple, on va utiliser mail.ini et site.ini, stocké dans “/application/config/” de votre application Zend.

mail.ini

[mail]
mail.adresse = "nom@fai.com"
mail.denomination = "Votre Nom"

site.ini

[site]
site.name = "Nom du site"
site.description = "Site Dev. Web et Actu"

Le contrôleur

Créez donc votre contrôleur qui va bien :


class RssController extends Zend_Controller_Action { }

On voudrait que le flux soit créé à cette adresse : http://www.votredomaine.com/rss/

function indexAction() {
	// On instancie la table news de la bdd
	$table = new Default_Model_Db_News();

	// Puis les deux fichiers ini
	$config = new Zend_Config_Ini('application/config/site.ini', 'site');
	$mail = new Zend_Config_Ini('application/config/mail.ini', 'mail');

        // l'url de base
       $urlDeBase = App_Tool_Uri::getUri();

	// on crée la requête qui va bien, les news valides (elles sont à 1), par ordre décroissant et limité à 10 news.
	$select = $table->select()
                    ->where('news.valid = ?', '1')
                    ->order('date DESC')
                    ->limit('10');

	// on récupère toutes les news de la table
	$news = $table->fetchAll($select);

	// On crée un tableau qui recense les informations principales
	$feed = array(
		'title' => "Flux RSS - " . $config->site->name, // On récupère le nom du site qui est stocké dans le fichier ini.
		'link' => $urlDeBase . '/rss/', // Lien vers le flux
		'charset' => 'utf-8', // Le type d'encodage, ici utf-8
		'description' => $config->site->description, // description
		'author' => $mail->mail->denomination, // L'auteur du site
		'language' => 'fr', // Rien de compliqué, la langue...
		'entries' => array() // Un tableau qui va contenir toutes les news
	);

        // On récupère tous les articles envoyés par la requête sql pour les placer dans les items qui vont bien.
	foreach ($liste as $article) {
		$feed['entries'][] = array(
			'title' => $article -> titre, // On récupère dans la base de données le titre de la news
			'link' => $urlDeBase . "/voir/id/" . $article->id, // Le lien vers l'article, ici dans l'action "voir"
			'description' => utf8_encode($article -> contenu), // La description (ou le contenu) de l'article
            'source' => $urlDeBase // l'url de base pour récupérer la source.
		);
	}

	// On rend inactif le Layout
	Zend_Layout::getMvcInstance()->disableLayout ();
	$rss = Zend_Feed::importArray($feed,'rss');
	// Et on envoi le flux rss !
	$rss->send();
}

Voilà c’est créé ! Vous pouvez maintenant l’ajouter dans le header de votre Layout :


<link rel="alternate" type="application/rss+xml" href="<?php echo $this->baseUrl() . "/rss/"; ?>" title="Flux RSS sur <?php echo $this->baseUrl(); ?>" />

Si vous n’avez pas compris ce passage :

// l'url de base
$urlDeBase = App_Tool_Uri::getUri();

Allez lire ce merveilleux tuto ! Pareil pour la manipulation des fichiers ini, .

N’hésitez par à mettre un commentaire en cas de question ou erreur de ma part ! De plus, n’hésitez pas à lire la documentation officielle de Zend_Feed !

CATÉGORIES :

Php

, Zend

    • stefy
    • December 9th, 2011

    bonjour ton tuto est génial

    mais j’ai créer le ras mais j’ai un petit problème quant j’utilise le ras il me dit que je n’ai pas d’article comment je peut résoudre mon problème? merci

  1. No trackbacks yet.