Toutes les brèves d’une année sur une page

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Présenter toutes les brèves d’une même année sur une page, c’est possible avec une seule boucle dans Spip 1.6 . Néanmoins si vous êtes dans une version antérieure (et que vous voulez y rester), c’est aussi possible avec un peu de PHP.

Objectif

Présenter toutes les brèves d’un site 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 brèves 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 brèves (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).

Pour déterminer l’année à afficher, 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 ?
-  D’une manière générale, l’absence de news pour une année donnée n’est pas gérée.

Contact

Je suis à votre disposition :
Raphaël BESSON

Avril 2003

Bon courage !

Note des admin : Si vous êtes à jour dans les versions de SPIP, il est possible a partir de la version 1.6 faire cela en SPIP pur à l’intérieur d’un squelette.

Voici la boucle :
<BOUCLE_principale(BREVES){par date}{annee_relatif=0}>

Et il suffit que cette boucle possède la date dans le contexte ou dans l’url ( ... par exemple nomDuFichier.php3 ?date=2003 )

Voir la documentation sur la gestion des dates

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom