Cette contrib permet de créer, puis d’utiliser une nouvelle balise #TRIMESTRE, à la fois en tant que balise dans une boucle articles, mais aussi comme critère dans la boucle.
Il faut ajouter ces 3 fonctions dans le fichiers « mes_fonctions.php » [1].
1. Créer la fonction qui calcule le trimestre à partir d’une date
Le format choisi pour le trimestre est de la forme « annee - trimestre » de manière à pouvoir opérer des tris. Le calcul s’effectue à partir des fonctions date de SPIP :
- function calculer_trimestre($la_date) {
- $la_date = normaliser_date($la_date);
- $le_mois = mois($la_date);
- $l_annee = annee($la_date);
- return $le_trimestre;
- }
A noter : cette fonction peut aussi s’utiliser telle quelle en tant que filtre sur une date à la manière classique : [(#DATE|calculer_trimestre)].
2. Ajouter la nouvelle colonne (le nouveau champ) dans la boucle
Afin de « déclarer » la nouvelle colonne, il faut modifier la fonction boucle_ARTICLE [2] de la façon suivante :
- function boucle_ARTICLE($id_boucle, &$boucles) {
- $boucle = &$boucles[$id_boucle];
- $id_table = $boucle->id_table;
- $boucle->select[] = "CONCAT(year(date), '-', quarter(date)) AS trimestre";
- $boucle->from[$id_table] = "spip_article";
- $mstatut = $id_table .'.statut';
- // Restreindre aux elements publies
- if (!$boucle->modificateur['criteres']['statut']) {
- if (!$GLOBALS['var_preview']) {
- if ($GLOBALS['meta']["post_dates"] == 'non')
- }
- }
- return calculer_boucle($id_boucle, $boucles);
- }
Cette modification peut s’apprécier en mode debug en cliquant sur « résultat » : on voit que la requête appelle un nouveau champ.
3. Créer la balise #TRIMESTRE qui retournera le trimestre
- function balise_TRIMESTRE($p) {
- $date_evenement = champ_sql('date', $p);
- $p->code = "calculer_trimestre($date_evenement)";
- $p->interdire_scripts = false;
- return $p;
- }
Désormais il est possible dans une boucle ARTICLES d’utiliser un critère « trimestre », et d’afficher une balise #TRIMESTRE dans les squelettes.
Le débat
L’interêt de cette contrib réside plus sur la méthode pour se créer une nouvelle balise (boucle + balise), ou un nouveau champ virtuel, que dans l’obtention d’un trimestre à partir d’une date (que l’on obtient aussi facilement avec un petit filtre utilisant la fonction « quarter(date) » de MySQL).
L’interrogation est plutôt : qu’est-ce qui est mieux (pour un résultat équivalent et un boulot équivalent) ?
soit : filtre + critère => 2 fonctions dans mes_fonctions
soit : nouveau champ virtuel => idem, 2 fonctions de plus (boucle et balise)
Le débat est lancé

