1

Flux RSS

RSS

Configurer un flux RSS peut se limiter à créer un fil dédié dont les nœuds seront utilisés pour automatiquement fabriquer le document XML. Il suffit alors d'assigner le numéro du fil au paramètre de configuration $rss_thread dans config.inc. Ce comportement est codé par l'action rssfeed qui extrait le titre, la date de création et les contenus du type texte de tous les nœuds actifs du fil $rss_thread pour fabriquer chaque entrée du flux.

rssfeed.php
  1. function rssfeed($lang) {
  2.     global $rss_thread;
  3.  
  4.     $itemlist = array();
  5.  
  6.     if ($rss_thread) {
  7.         $sqllang=db_sql_arg($lang, false);
  8.  
  9.         $tabthreadnode=db_prefix_table('thread_node');
  10.         $tabnode=db_prefix_table('node');
  11.         $tabnodelocale=db_prefix_table('node_locale');
  12.         $tabnodecontent=db_prefix_table('node_content');
  13.         $tabcontenttext=db_prefix_table('content_text');
  14.  
  15.         $where="tn.thread_id=$rss_thread AND tn.ignored=FALSE";
  16.  
  17.         $sql="SELECT nl.name AS node_name, nl.title AS node_title, UNIX_TIMESTAMP(n.created) AS node_created, ct.text AS content_text FROM $tabthreadnode tn JOIN $tabnode n ON n.node_id=tn.node_id JOIN $tabnodelocale nl ON nl.node_id=tn.node_id AND nl.locale=$sqllang LEFT JOIN $tabnodecontent nc ON nc.node_id=n.node_id AND nc.content_type='text' AND nc.ignored=FALSE LEFT JOIN $tabcontenttext ct ON ct.content_id=nc.content_id AND ct.locale=nl.locale WHERE $where ORDER BY tn.number";
  18.  
  19.         $r = db_query($sql);
  20.  
  21.         if ($r) {
  22.             foreach ($r as $node) {
  23.                 extract($node);
  24.                 $title = $node_title;
  25.                 $uri = false;   // $lang . '/' . $node_name;
  26.                 $created = $node_created;
  27.                 $description = strip_tags($content_text);
  28.                 $itemlist[] = compact('title', 'uri', 'created', 'description');
  29.             }
  30.         }
  31.     }
  32.  
  33.     $description = translate('description', $lang);
  34.  
  35.     $output = view('rssfeed', false, compact('lang', 'description', 'itemlist'));
  36.  
  37.     return $output;
  38. }

La description du flux est reprise de la description du site web définie dans strings.inc.

Vous pouvez modifier l'action rssfeed pour n'afficher que les titres des nœuds d'un fil sans structure particulière et ajouter un lien à chaque titre.

  1.         $tabthreadnode=db_prefix_table('thread_node');
  2.         $tabnode=db_prefix_table('node');
  3.         $tabnodelocale=db_prefix_table('node_locale');
  4.  
  5.         $where="tn.thread_id=$rss_thread AND tn.ignored=FALSE";
  6.  
  7.         $sql="SELECT nl.name AS node_name, nl.title AS node_title, nl.abstract AS node_abstract, UNIX_TIMESTAMP(n.created) AS node_created FROM $tabthreadnode tn JOIN $tabnode n ON n.node_id=tn.node_id JOIN $tabnodelocale nl ON nl.node_id=tn.node_id AND nl.locale=$sqllang WHERE $where ORDER BY tn.number";

Extrait le nom, le titre, la date de création et le résumé de tous les nœuds actifs du fil $rss_thread. Le résultat est trié par numéro de nœud.

  1.         if ($r) {
  2.             foreach ($r as $node) {
  3.                 extract($node);
  4.                 $title = $node_title;
  5.                 $uri = $lang . '/' . $node_name;
  6.                 $created = $node_created;
  7.                 $description = preg_replace('/(\r\n|\r|\n)+/', ' - ', preg_replace('/[\t ]+/', ' ', $node_abstract));
  8.                 $itemlist[] = compact('title', 'uri', 'created', 'description');
  9.             }
  10.         }

Ajoute l'URL simplifiée de chaque nœud à la liste des items. IMPORTANT : Ajoutez le numéro du fil $rss_thread au paramètre de configuration $default_folder dans config.inc.

Pour fabriquer le flux RSS avec le contenu de plusieurs fils, modifiez la clause WHERE :

  1.         $where='tn.thread_id IN (' . (is_array($rss_thread) ? implode(',', $rss_thread) : $rss_thread) . ') AND tn.ignored=FALSE';

Vous pouvez insérer dans le flux l'image associée à un nœud.

  1.         $sql="SELECT nl.name AS node_name, nl.title AS node_title, nl.abstract AS node_abstract, nl.image AS node_image, UNIX_TIMESTAMP(n.created) AS node_created FROM $tabthreadnode tn JOIN $tabnode n ON n.node_id=tn.node_id JOIN $tabnodelocale nl ON nl.node_id=tn.node_id AND nl.locale=$sqllang WHERE $where ORDER BY tn.number";

Ajoute la sélection du champ node_name à l'ordre SQL.

  1.         if ($r) {
  2.             foreach ($r as $node) {
  3.                 extract($node);
  4.                 $title = $node_title;
  5.                 $uri = $lang . '/' . $node_name;
  6.                 $created = $node_created;
  7.                 $description = preg_replace('/(\r\n|\r|\n)+/', ' - ', preg_replace('/[\t ]+/', ' ', $node_abstract));
  8.                 $image_url=$node_image;
  9.                 $image_size=$image_url ? filesize(ROOT_DIR . $node_created) : 0;
  10.                 $itemlist[] = compact('title', 'uri', 'created', 'description', 'image_url', 'image_size');
  11.             }
  12.         }
  13.     }

Ajoute l'URL de l'image et la taille de l'image de chaque nœud dans la liste des items.

Terminez en ajoutant une balise <enclosure> du type image/png à la vue rssfeed :

  1. <?php if ($image_url): ?>
  2.         <enclosure type="image/png" url="<?php echo $base_url; ?><?php echo $image_url; ?>" length="<?php echo $image_size; ?>" />
  3. <?php endif; ?>
  4.         <pubDate><?php echo date('r', $created); ?></pubDate>
  5.     </item>

La balise <head> du document HTML d'une page contient toujours un lien sur le flux RSS :

<link rel="alternate" href="http://www.izend.org/fr/rss" type="application/rss+xml" title="izend.org RSS" />

Pour donner accès au flux RSS dans une page, ajoutez un lien comme dans les vues link et social, des vues qui peuvent tout simplement être insérées dans la page d'accueil à l'aide d'un contenu du type insertion :

RSS

<a class="rss" href="<?php echo $base_path; ?>/fr/rss" target="_blank" rel="nofollow" title="Inscrivez-vous au flux RSS"><span>RSS</span></a>

RSS

Le logo affiché sur la page du flux RSS est l'image contenu dans le fichier siteqr.png dans le dossier logos.

Voir la balise <image> générée par la vue rssfeed :

  1.     <image>
  2.         <title><?php echo $sitename; ?></title>
  3. <?php if ($lang): ?>
  4.         <link><?php echo $base_url; ?>/<?php echo $lang; ?></link>
  5. <?php else: ?>
  6.         <link><?php echo $base_url; ?></link>
  7. <?php endif; ?>
  8.         <url><?php echo $base_url; ?>/logos/siteqr.png</url>
  9.         <width>50</width>
  10.     </image>
VOIR AUSSI

translate, head

Commentaires

Pour ajouter un commentaire, cliquez ici.