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);
$le_trimestre = $l_annee.'-'.ceil ($le_mois/3);
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']) {
$boucle->where[]= array("'='", "'$mstatut'", "'\"publie\"'");
if ($GLOBALS['meta']["post_dates"] == 'non')
$boucle->where[]= array("'<'", "'$id_table" . ".date'", "'NOW()'");
}
else $boucle->where[]= array("'IN'", "'$mstatut'", "'(\"publie\",\"prop\")'");
}
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é
Aucune discussion
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 : |