Cyril MARION a écrit :
J'ai résolu mon souci en 3 étapes :
1. créer une fonction qui calcule un "trimestre" à partir d'une date
2. créer le champ dans la boucle
3. créer la balise qui appelle le champ
Voilou, c'est résumé dans un article en cours de validation sur spip-contrib : Une nouvelle balise : exemple avec #TRIMESTRE - SPIP-Contrib
J'espère que ça pourra servir à quelqu'un !
A+
Cyril
Salut,
J'ai lu ton article. Mais c'est pas un peu compliqué tout ça?
Il y a pas mal d'imprécisions dans l'article, par exemple :
- calcule_trimestre (code) ou calculer_trimestre (exemple) ?
- ce n'est pas [(#DATE{calculer_trimestre})], mais [(#DATE|calculer_trimestre)]
- boucle_ARTICLE (code) ou boucle_ARTICLES (SPIP) ?
attention : la surcharge de la boucle ARTICLES est incompatible avec le plugin acces_restreint
Il manque un exemple de boucle afin de tester l'intérêt de la solution proposée.
Est-ce qu'on peut pas arriver au même résultat plus simplement ?
un simple filtre suffirait largement :
function trimestre($la_date) {
$la_date = normaliser_date($la_date);
$le_mois = mois($la_date);
return ceil($le_mois/3);
}
à utiliser comme ceci :
[(#DATE|trimestre)]
ou même :
[(#DATE|annee)]-[(#DATE|trimestre)]
Ok pour le code de ta balise #TRIMESTRE :
function balise_TRIMESTRE($p) {
$date = champ_sql('date', $p);
$p->code = "trimestre($date)";
$p->interdire_scripts = false;
return $p; }
pour le critère d'une boucle, voici une solution :
function critere_trimestre($idb, &$boucles, $crit) {
$params = $crit->param;
if (count($params) < 1)
erreur_squelette(_T('zbug_info_erreur_squelette'), "BOUCLE$idb : trimestre ?");
$trimestre= array_shift($params);
$trimestre = $trimestre[0]->texte;
if (strpos($trimestre, '|')!=false) $op = "REGEXP \'$trimestre\'";
$op = "REGEXP \'$trimestre\'";
else $op = "= $trimestre";
$boucle = &$boucles[$idb];
$table = $boucle->id_table;
$where = "quarter($table.date) $op";
if ($crit->not) $where = "NOT($where)";
$boucle->where = "'$where'";
}
Exemples :
<BOUCLE_articles(ARTICLES) {trimestre 3}>
ou : {trimestre 3|4}
ou : {!trimestre 3}
ou : {!trimestre 3|4}
mais tout ce binz peut-être aussi obtenu comme ceci :
<BOUCLE_articles(ARTICLES) {quarter(date)=3}>
ou : {quarter(date)==3|4}
ou : {quarter(date)!=3}
ou : {quarter(date)!==3|4}
Pat