Section: Générer un flux de syndication RSS
« Générer du XML quelconque | ^ Générer du contenu avec les vues | Générer un flux de syndication Atom » |
− Table des matières
Jelix permet de générer un fil RSS assez facilement grâce à
jResponseRss20
. Cet objet prend en charge totalement la
spécification RSS 2.0. Comme tout
type de réponse, la première chose à faire est de récupérer l'objet
jResponseRss20 (alias "rss2.0").
$rep = $this->getResponse('rss2.0');
Pour utiliser ce type de réponse, vous devez installer le module jfeeds,
en ajoutant le paquet jelix/feeds-module
:
composer require "jelix/feeds-module"
Ensuite configurez le module et lancez l'installateur :
php dev.php module:configure jfeeds
php install/installer.php
Informations sur le fil rss ¶
jReponseRss20 possède tout d'abord une propriété infos
, qui est un objet
permettant de spécifier les propriétés du fil RSS : son titre, l'url du site, le
copyright, la description etc. Exemple :
$rep->infos->title = 'Actualité de Jelix';
$rep->infos->webSiteUrl= 'http://jelix.org/fr/';
$rep->infos->copyright = 'Copyright 2017 jelix.org';
$rep->infos->description = 'Actualité sur le framework PHP Jelix';
$rep->infos->updated = '2017-06-08 12:00:00';
$rep->infos->published = '2017-06-08 12:00:00';
$rep->infos->ttl=60;
Les champs updated
et published
sont des dates qui indiquent
respectivement la date de dernière mise à jour du fil RSS, et la date de
publication du channel RSS. On peut mettre la même date. Ces dates sont en
général déterminées par la date de publication de l'item le plus récent qui sera
présenté dans le fil. Par exemple, pour un fil RSS d'un blog, ce sera la date du
dernier billet.
La propriété ttl
indique à l'agrégateur de l'utilisateur, la durée (en
minute) pendant laquelle il peut mettre le contenu en cache avant de redemander
le fil RSS.
Par défaut, la description doit être du texte normal. Cependant vous pouvez
indiquer du HTML ou XHTML. Dans ce cas vous devez l'indiquer dans la propriété
descriptionType
, qui peut prendre la valeur "html", "xhtml" ou "text".
Informations sur les items ¶
Il faut ensuite remplir le channel avec les items que vous voulez publier. Pour un blog par exemple, les items seront les descriptifs des derniers billets publiés.
Pour chaque item, vous devez appeler la méthode createItem()
de
jResponseRss20
pour récupérer un objet qui contiendra les informations de
l'item. Vous remplissez alors cet objet et vous le stockez dans l'objet
jResponseRss20
avec la méthode addItem()
.
Voici un exemple avec une dao de news :
$newsdao = jDao::get('news');
$first = true;
// ici on récupère la liste des 10 dernières news
// on suppose que la liste est classé de la plus récente à la moins récente
// (méthode définie dans la dao)
$list = $newsdao->findTenFirstNews();
foreach ($list as $news) {
if ($first) {
// le premier enregistrement permet de connaitre
// la date du channel
$rep->infos->updated = $news->date_create;
$rep->infos->published = $news->date_create;
$first=false;
}
// on récupère l'url de l'article de news
$url = jUrl::get('news~default:article', array('newsid'=>$news->id));
// on crée un item RSS, en donnant un titre, une url, une date au format [yyyy-mm-jj hh-mm-ss]
$item = $rep->createItem($news->title, $url, $news->date_create);
// auteur de la news
$item->authorName = $news->author;
// contenu HTML de la news
$item->content = $news->content;
$item->contentType = 'html';
//dans notre exemple, on dit que l'url de la news est considéré
// comme étant l'id de la news
// dans le cas contraire, on aurait pu mettre $item->id =$news->id
$item->idIsPermalink = true;
// on ajoute l'item dans le fil RSS
$rep->addItem($item);
}
Autres informations ¶
Il est possible d'indiquer plus d'informations sur le fil rss ou sur chaque item.
Consultez la documentation du module jfeeds.