Flux RSS
Un site peut renvoyer un flux RSS automatiquement généré à partir des extraits ou des contenus d'un ou plusieurs fils.
Il suffit d'assigner les numéros des fils au paramètre $rss_thread
et de mettre le paramètre $rss_description
à 'abstract'
ou 'content'
dans config.inc.
L'action rssfeed
fabrique chaque entrée du flux en prenant le titre, la date de création et les extraits ou les contenus du type texte
de tous les nœuds actifs des fils définis par $rss_thread
.
rssfeed.php
- require_once 'filemimetype.php';
- function rssfeed($lang) {
- global $rss_thread, $rss_description;
- $feed_content = $rss_description == 'content';
- $itemlist = array();
- if ($rss_thread) {
- $sqllang=db_sql_arg($lang, false);
- $tabthreadnode=db_prefix_table('thread_node');
- $tabnode=db_prefix_table('node');
- $tabnodelocale=db_prefix_table('node_locale');
- $where=(is_array($rss_thread) ? 'tn.thread_id IN (' . implode(',', $rss_thread) . ')' : "tn.thread_id=$rss_thread") . ' AND tn.ignored=FALSE';
- if ($feed_content) {
- $tabnodecontent=db_prefix_table('node_content');
- $tabcontenttext=db_prefix_table('content_text');
- $sql="SELECT nl.name AS node_name, nl.title AS node_title, UNIX_TIMESTAMP(n.created) AS node_created, nl.image AS node_image, 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";
- }
- else {
- $sql="SELECT nl.name AS node_name, nl.title AS node_title, UNIX_TIMESTAMP(n.created) AS node_created, nl.image AS node_image, nl.abstract AS node_abstract 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 n.created DESC";
- }
- $r = db_query($sql);
- if ($r) {
- foreach ($r as $node) {
- extract($node);
- $title = $node_title;
- $uri = false; // "/$lang/$node_name";
- $created = $node_created;
- $description = preg_replace('/(\r\n|\r|\n)+/', ' - ', preg_replace('/[\t ]+/', ' ', strip_tags($feed_content ? $content_text : $node_abstract)));
- $image_uri = false; // $node_image;
- $image_size = $image_uri ? filesize(ROOT_DIR . $image_uri) : 0;
- $image_type = $image_uri ? file_mime_type(ROOT_DIR . $image_uri) : false;
- $itemlist[] = compact('title', 'uri', 'created', 'description', 'image_uri', 'image_size', 'image_type');
- }
- }
- }
- $description = translate('description', $lang);
- $output = view('rssfeed', false, compact('lang', 'description', 'itemlist'));
- return $output;
- }
Si $rss_description
vaut 'content'
, le flux est construit avec les contenus de type texte des nœuds des fils définis par $rss_thread
et ordonné par leurs numéros, sinon, le flux est directement construit avec les extraits des nœuds et ordonné par leurs dates de création.
La description du flux est reprise de la description du site web définie dans strings.inc.
Pour associer l'URL simplifiée de chaque nœud à son titre dans la liste des items, mettez $uri
à "/$lang/$node_name"
.
IMPORTANT : Ajoutez les numéros des fils dans $rss_thread
au paramètre de configuration $default_folder
dans config.inc.
Si des nœuds ont des images, mettez $image_uri
à $node_image
pour les ajouter au flux RSS.
La balise <head>
du document HTML d'une page contient toujours un lien sur le flux 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
:
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
:
- <image>
- <title><?php echo $sitename; ?></title>
- <?php if ($lang): ?>
- <link><?php echo $base_url; ?>/<?php echo $lang; ?></link>
- <?php else: ?>
- <link><?php echo $base_url; ?></link>
- <?php endif; ?>
- <url><?php echo $base_url; ?>/logos/siteqr.png</url>
- <width>50</width>
- </image>
Commentaires