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é
Discussions par date d’activité
Une discussion
Salut à tous,
Voici qq idées qui ont été évoquées en août et que je trouve utile de replacer ici, le débat n’est peut-être pas encore clos...
La surcharge de la boucle ARTICLES est incompatible avec le plugin acces_restreint.
Est-ce qu’on peut pas arriver au même résultat sans cette surcharge ?
un simple filtre trimestre ?
à utiliser comme ceci :
[(#DATE|trimestre)]
ou même :
[(#DATE|annee)]-[(#DATE|trimestre)]
Ok pour le code de ta balise #TRIMESTRE :
Pour le critère d’une boucle, voici une solution :
Exemples :
Mais tout ce binz peut-être aussi obtenu comme ceci :
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 : |