Des fils RSS sur mesure dans eZ Publish

Ce billet aurait pu s'appeler RSS and eZ Publish on Steroïd ou bien RSS ou autres exports de contenu avec eZ Publish ou encore Utilisation de différents layouts dans eZ Publish ... La technique présentée dans ce billet a été inspirée par le message de Bertrand Danes sur le forum eZ Publish France et pour certains points techniques par l'extension Google Sitemap de Sergey Shishkin qui utilise aussi ce mécanimse.

Depuis un moment, j'avais envie de gérer plus finement et d'étendre les flux RSS sur pwet.fr (et maintenant sur t-ka.net :-)). Les principaux problèmes étant pour moi l'impossibilité de changer l'URL des items et l'impossibilité d'aggréger plusieurs attributs dans la balise description. Il est à noter aussi qu'eZ Publish n'inclut pas l'élément <guid> dans les flux RSS, ce qui empêche la détection correcte de mises à jour par les lecteurs RSS. J'avais aussi écrit un petit patch pour pouvoir inclure un feuille de style XSLT dans les fils RSS pour eZ Publish 3.8.x, mais l'utilisation d'un layout et du système de template pour créer des fils RSS rend complètement obsolète le patch en question... Et puis j'ai un petit projet personnel en tête qui devrait utiliser assez intensivement cette technique, enfin si il se concrétise un jour...

Pour en revenir, à cette technique, elle est assez simple à mettre en oeuvre ( easy comme toujours ;-)). Il suffit de créer un layout spécifique pour le RSS. Mais qu'est ce qu'un layout ? Il s'agit en fait de spécifier quel fichier est utilisé comme template de pagelayout. On peut aussi le faire avec une règle d' override , mais dans le cas d'un layout, il est également possible de spécifier le "Content-Type" que générera celui-ci. Dans le cas de mes fils RSS, mon layout.ini.append.php contient une section qui ressemble à :

 

[rss]
PageLayout=rss_pagelayout.tpl
ContentType=text/xml 

 

Ces lignes signifient que les pages appelées via l'URL /layout/set/rss/ utiliseront comme template pagelayout le fichier design/<mon_design>/templates/rss_pagelayout.tpl et tout cela générera du XML. Le fichier en question est très simple et on retrouve le point central des pagelayout traditionnels (si je puis dire...) :

 

<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
        <channel>
                <language>fr-FR</language>
                {$module_result.content}
        </channel>
</rss>

 

Appeler l'URL /layout/set/rss/ revient à appeler le vue full du noeud racine dans ce pagelayout, ce qui donnera probablement des résultats bizarres. Il est par contre tout à fait possible d'appeler une vue personnalisée (au hasard rss_full) sur un noeud quelconque (par exemple 119) via l'URL /layout/set/rss/content/view/rss_full/119. Il reste alors à faire en sorte que design/<mon_design>/templates/node/view/rss_full.tpl et ses éventuels override génèrent du RSS et le tour est joué ! Pour améliorer les performances, il vaut mieux rajouter cette vue dans la liste des vues à mettre en cache dans le paramètre CachedViewModes dans la section ContentSettings dans le site.ini.append.php des siteaccess concernés.

Pour aller encore plus loin, on peut enfin utiliser le traducteur d'URL d'eZ Publish pour donner des adresses plus sympas aux fils voire permettre l'utilisation d'un node_id en paramètre pour avoir des fils RSS "automatiques". Par exemple, le fils RSS des commentaires du billets où je parlais de l'inclusion de vidéo de Dailymotion ou de Youtube dans eZ Publish via un custom tag est disponible à l'adresse : http://pwet.fr/rss/feed/commentaires/64219 qui correspond en fait à http://pwet.fr/layout/set/rss/content/view/rssco/64219. Il ne reste donc plus qu'à adapter les templates pour ajouter les liens vers ces fils RSS pour les rendre disponibles.

Tags : XML, XSLT, eZ Publish, Truc, RSS, Blog

» Commentaires

- flux rss automatiques (#64742) par bdanes le 11 Mars 2007 à 19:06
Mon idée d'utiliser un nouveau layout pour créer des flux rss personnalisés était donc bonne ! Je trouve effectivement que ça méritais d'en faire un article sur ton blog !

Au fait, comment fais-tu pour générer le lien absolu du noeud ? tu as utilisé le template operator de l'extension googlesitemap ou utilises-tu quelque chose de plus simple ? tu ne l'expliques pas dans ton article.

Sinon, la seule limitation que j'y ai vue et qui m'oblige à utiliser également le système d'eZ d'export RSS, c'est que ce système de layout ne marche que sur les noeuds qui sont visibles de tous. Pour créer un flux rss d'une partie du site protégé, il faut utiliser le système prévu dans eZ publish qui lui fonctionne comme un module avec des droits spécifiques.
- Précisions (#64753) par Damien le 12 Mars 2007 à 00:17
Pour les liens, j'utilise des choses du type :
http://{ezini('SiteSettings', 'SiteURL')}/{$n.parent.url_alias}
c'est à modifier en fonction de la configuration des adresses d'eZ Publish (Hostname, URL, ...)

Pour les droits, je ne comprend pas bien le problème, normalement les mêmes droits s'appliquent dans la version RSS via le layout spécifique que la version "normale".
- droits (#64755) par bdanes le 12 Mars 2007 à 15:46
c'est justement ça qui me gênais pour mon problème spécifique : je voulais pouvoir faire un flux rss d'un noeud dont les droits de lecture sont limités. Impossible de lire ce flux dans un lecteur comme thunderbird puisqu'il faut rentrer un login et un mot de passe pour y accéder (si je me trompe, dis le moi).

Le système de flux rss intégré à eZ publish permet, lui, d'exporter un flux indépendamment des droits sur les noeuds exportés. on peut donc créer un flux RSS d'une partie protégée du site qui sera visible de tous et donc lisible par tous les lecteurs de flux RSS.

sinon pour la génération du lien absolu vers le site, effectivement j'utilise la même chose (mais avec un index.php pour l'instant !) ce qui me paraît effectivement plus simple (mais pas forcément universel) que ce que propose l'extension googlesitemap.
- Précisions (bis) (#64756) par Damien le 12 Mars 2007 à 16:57
Pour les permissions tu devrais regarder du côté du paramètre limitation de fetch list qui permet de passer outre les limitations de droits.
- Limitation résolue (#64757) par bdanes le 12 Mars 2007 à 21:16
ok merci j'avais complètement zappé ce paramètre (limitation / Access override) du fetch list...Mais j'ai bien fait d'en parler, ça m'a permis d'apprendre quelque chose aujourd'hui !
- Convertir les textes (#64767) par soon7 le 14 Mars 2007 à 00:12
Que faut il appliquer sur les textes de la partie description afin de les rendre valides, à cause des accents par exemple. y a t il un un |ez quelque chose à appliquer ou un truc du genre ?
sinon merci pour cette info sur le RSS, ça déchire, ça permet de faire mes flux comme je veux
- reformulation (#64778) par soon7 le 15 Mars 2007 à 03:28
En fait , je mettais mal exprimé, je voulais savoir en fait si Ez avait de base un opérateur de template permettant de traduire les entités html numériques càd permettant par exemple de passer de
& é $ à ç < ----> &#38; &#233; $ &#224; &#231; &#60;
Comme apparement ça n'existe pas de base, j'ai crée mon propre opérateur de template le faisant et mon flux fonctionne nickel. par contre, quand je teste l'affichage avec firefox, si je laisse les balises <dc:format>,<dc:language> ou <dc:creator> l'affichage merde. Aurais tu une idée d'ou cela peut il venir ? est ce ez qui a du mal à les digérer ?
- limitation (#65436) par bdanes le 10 Mai 2007 à 12:12
en fait, je reviens avec mon problème de création d'un flux rss sur un noeud dont les droits de lecture ne sont pas donnés à tout le monde, maintenant que je souhaite vraiment la mettre en oeuvre. Effectivement, le paramètre limitation du fetch list permet d'afficher des sous-noeuds "privés" ; par contre il n'est pas possible d'afficher le noeud passé dans l'url, si celui-ci est privé. Dans ton exemple, pour pouvoir afficher /layout/set/rss/content/view/rss_full/119, il faut que le noeud 119 soit "public", sinon ça ne marche pas...et, il me semble que ce n'est pas si facile de contourner le problème (notamment parce que seul le fetch list permet de contouner les droits).

Finalement, la solution qui me semble la plus simple pour créer un flux rss personnalisé, c'est la création d'un module...comme dans l'extension eZ Publish SmileClasses dont tu as déjà parlée !
- Astuce (#65438) par Damien le 10 Mai 2007 à 20:08
Bertrand> tu peux toujours utiliser par exemple /layout/set/rss/content/view/rss_full/2/(base)/119 pour passer en paramètre le node_id du noeud de base, si l'utilisateur n'a pas accès en lecture à celui-ci
- merci (#65445) par bdanes le 11 Mai 2007 à 16:13
tu as tout à fait raison. Mon cas est de plus en plus critiques puisque j'y avais pensé mais j'y voyais quelques problèmes qui n'existent finalement pas. Encore merci
- Tres simple, et joli (#65756) par xavier le 16 Juin 2007 à 21:34
Bravo,

Tu as la solution... et avec les enhanced object relations ou les relations d'objets post 3.9, tu peux faire des tags sur des billets et exporter les rss comme cela ;)

Bon blog et a bientot !

Xavier
- Merci + complément pour url_alias (#67664) par Mickael ROBIN le 11 Mars 2009 à 11:49
Bonjour,
et merci beaucoup pour cet article clair et ô combien utile pour automatiser la génération de flux RSS avec eZ.

Je recommanderai d'ajouter "UseAccessPass=false" dans layout.ini.append.php
Cela permet en effet d'utiliser le layout principal pour générer les url alias.

Ce qui donne :
- pour layout.ini.append.php :
...
[rss]
PageLayout=rss_pagelayout.tpl
ContentType=text/xml
UseAccessPass=false
...

- et pour rss_full.tpl :
...
{foreach $articles as $article}
<item>
<title>$article.name|wash()}</title>
<link>{$playlist.url_alias|ezurl('no','full')}</link>
<description></description>
</item>
{/foreach}

Encore merci Damien :-)
Mickael
- Merci beaucoup. (#68129) par PaulEtienney le 17 Février 2010 à 12:24
Article on ne peut plus clair. J'adore. J'ai mis 10 minutes à mettre en place un système RSS universel pour mon site.

Encore une fois ez publish montre toute sa puissance.

Merci pwet, merci ez publish.

» Trackback

Aucun trackback

Les trackacks sont désactivés

Flux RSS des billets

Flux RSS des billets

Rechercher sur pwet.fr

À retenir

Derniers commentaires

Archives

Nuage de tags

Bioutifoul photos

Quelques liens

Licence d'utilisation

Contenu sous Licence Creative Commons By-Sa

Sauf mentions spécifiques, les billets et les photos publiés sur ce site sont placés sous la licence Creative Commons by-sa.

Pour toute utilisation dépassant le cadre de cette licence, merci de me contacter par e-mail.

Login