Archivage brèves par année

Une petite contrib pour l'archivage de brèves par année
(débuté sur [spip-dev] et ramené sur [spip])

Toute modif, remarque, critique, ... acceptée.

Dès que je rentre de vacances, je mets ça sur spip_contrib.

Bonne utilisation.
Raphaël BESSON
mailto:raph@dreamnev.org
__________________________________________________________________

Objectif
----------
Présenter toutes les news d'un site (brèves) sur une même page en ne mettant
que les brèves d'une même année sur la page.

Sous-objectifs
---------------
* Par défaut, présenter les news de l'année en cours
* Permettre la navigation d'une année à l'autre
* Ne pas avoir à modifier le squelette à chaque début d'année
* Récupérer les anciennes news (quand le site était en HTML statique avant
que le webmestre ne découvre ce merveilleux outil qu'est SPIP).

Principe
--------
On créé un fichier de squelette spécifique qu'on appelle news.php3 (on créé
aussi son homologue news.html).
On se base sur une variable transmise par l'URL qu'on appelle var_nav_year
(le "var_" est là pour optimiser le cache de SPIP)
L'appel de la page "news" doit se faire de la forme
news.php3?var_nav_year=AAAA
où AAAA est l'année désirée.

Haut dans le squelette, on vérifie au préalable que var_nav_year est
positionnée. Si non, on la force sur l'année en cours.
On en profite pour ramener systématiquement toute année demandée antérieure
à la première année dispo sur cette première année (ici 2000. Si l'URL a
1998 dans var_nav_year, on remet 2000)
De même, si on demande une année postérieure à l'année en cours, on ramène
var_nav_year à l'année en cours.
On conserve l'année à retenir dans une variable PHP $id_annee
<?php
if(isset($GLOBALS['var_nav_year'])) {
     $id_annee=intval($GLOBALS['var_nav_year']);
     if ($id_annee<=2000) { $id_annee = 2000; };
     if ($id_annee>intval(date('Y', time()))) { $id_annee = intval(date('Y',
time())); }; };
}
else {
$id_annee = intval(date('Y', time()));
}
?>

Une fois que id_annee est renseignée, on va afficher les news correspondant
à cette année.
L'utilisation des variables étant difficile au sein des boucles SPIP, on
construit une boucle BREVES qui affiche toutes les news du site.
A l'intérieur de cette boucle, on introduit un bout de PHP qui fait la
sélection des brèves en comparant l'année de la brève avec id_annee.
<BOUCLE_principale(BREVES){tout}{par date}{inverse}>
<?php $annee_breve='[(#DATE|annee)]';
     if ($annee_breve==$id_annee ) { ?>
          [(#TITRE)] <br>
          [(#TEXTE)]
<?php } ?>
</BOUCLE_principale>

En dehors de la boucle, si on est sur la plus ancienne année, on fait un
include de la "vieille" page statique des news :
<?php
if ($id_annee<=2000) {
  include "news2000.html";
};
?>
( Normalement, la boucle n'a rien ramené !)

Reste le problème de la navigation.
Pour interroger les brèves d'une année antérieure, on vérifie qu'on est pas
sur la dernière année dispo :
  <?php if ($id_annee > 2000) {
       echo "<a href='news.php3?var_nav_year=".($id_annee - 1)."'>";
       echo "Voir les news de l'année ".($id_annee-1)."</a>";
      }
  ?>

Pour interroger les brèves d'une année postérieure, on vérifie qu'on est pas
sur l'année courante :
  <?php if ($id_annee < intval(date('Y', time()))) {
       echo "<a href='news.php3?var_nav_year=".($id_annee + 1)."'>");
       echo "Voir les news de l'année ".($id_annee+1)."</a>";
      }
   ?>

Pour la présentation, on peut écrire en haut de page :
Toutes les news pour l'année <?php echo $id_annee; ?>

Un exemple ?
--------------
Un exemple ici http://www.dreamnev.org/fr/news.php3
(désolé, je suis nul en présentation)

Limites du projet
-----------------
Que se passe-t-il si le 1er janvier d'une nouvelle année, il n'y a pas
encore de news pour cette année ?

Contact
--------
Raphaël BESSON Avril 2003
mailto:raph@dreamnev.org