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 !
Discussions par date d’activité
2 discussions
une erreur s’est glissée dans le code !
Dans le paragraphe Pour interroger les brèves d’une année postérieure, on vérifie qu’on est pas sur l’année courante :
Il faut enlever la parenthèse fermante de :
en
echo "<a href='news.php3?var_nav_year=".($id_annee + 1)."'>";
Je déconseille de coder en dur le nom du script. si on le change il faut retourner dans le script modifier le code à la main. A la place, utilisez $PHP_SELF
Exemple :
echo "<a href=\"$PHP_SELF?var_nav_year=" . ($id_annee - 1)."\">";
Deux remarques judicieuses non bloquantes mais à prendre en compte.
Merci Silicium
la « ) » c’est corrigé, pour le nom du script vous ferez la manip tout seuls les amis ;-)
Répondre à ce message
Et comment faire pour afficher sur une même page brèves ET articles classés ENSEMBLE par année de publication ?
Salut,
Pour avoir les news et les articles, il suffit de faire deux boucles sur le même principe l’une en dessous de l’autre : la première sur les brèves, la seconde sur les articles.
A+
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
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.
Suivre les commentaires : |