Changeset 28174 in spip-zone


Ignore:
Timestamp:
Apr 28, 2009, 8:59:32 AM (10 years ago)
Author:
marcimat@…
Message:
  • proposition de criteres de calculs statistiques : {compte champ}, {somme champ}, {minimum champ} {maximum champ} {moyenne champ}.

A TESTER et à discuter sur la pertinence et le fonctionnement.

S'utiliser ensuite avec les balises homonymes : #SOMME{champ}.
Contrairement au critère {compteur table} ces critères ne calculent pas de jointures.

En test aussi, une autre possibilité : {stats champ} qui les calcule tous, mais récupérable par #STATS{champ, somme} (je n'ai pas réussi à pouvoir utiliser les #SOMME{champ} et consoeur avec ...

Exemple totalement inutile et bidon :

<BOUCLE_articles(ARTICLES){fusion statut}{moyenne id_article}{maximum id_article}{minimum id_article}{compte id_article}{somme id_article}>
#ID_ARTICLE,
somme : #SOMME{id_article} ,
compte : #COMPTE{id_article},
moyenne : #MOYENNE{id_article},
minimum : #MINIMUM{id_article},
maximum : #MAXIMUM{id_article}<br />
</BOUCLE_articles>

<BOUCLE_articles2(ARTICLES){fusion statut}{stats id_article}>
#ID_ARTICLE,
somme : #STATS{id_article,somme} ,
compte : #STATS{id_article,compte},
moyenne : #STATS{id_article,moyenne},
minimum : #STATS{id_article,minimum},
maximum : #STATS{id_article,maximum}<br />
</BOUCLE_articles2>
Location:
_plugins_/_stable_/spip-bonux-2
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/spip-bonux-2/plugin.xml

    r26287 r28174  
    44  <icon>img_pack/spip-bonux.png</icon>
    55  <licence>(c) 2008-2009 GPL</licence>
    6   <version>1.6</version>
     6  <version>1.7</version>
    77  <etat>stable</etat>
    88  <description>Le plugin qui lave plus SPIP que SPIP, avec des chouettes cadeaux dedans ! Interface douce, boucles POUR et CONDITION, tableaux, compteur, etc.</description>
  • _plugins_/_stable_/spip-bonux-2/public/spip_bonux_balises.php

    r27988 r28174  
    172172 */
    173173function balise_COMPTEUR_dist($p) {
     174        return calculer_balise_criteres('compteur', $p);
     175}
     176
     177/** Balise #SOMME associee au critere somme */
     178function balise_SOMME_dist($p) {
     179        return calculer_balise_criteres('somme', $p);
     180}
     181
     182/** Balise #COMPTE associee au critere compte */
     183function balise_COMPTE_dist($p) {
     184        return calculer_balise_criteres('compte', $p);
     185}
     186
     187/** Balise #MOYENNE associee au critere moyenne */
     188function balise_MOYENNE_dist($p) {
     189        return calculer_balise_criteres('moyenne', $p);
     190}
     191
     192/** Balise #MINIMUM associee au critere moyenne */
     193function balise_MINIMUM_dist($p) {
     194        return calculer_balise_criteres('minimum', $p);
     195}
     196
     197/** Balise #MAXIMUM associee au critere moyenne */
     198function balise_MAXIMUM_dist($p) {
     199        return calculer_balise_criteres('maximum', $p);
     200}
     201
     202/** Balise #STATS associee au critere stats
     203 * #STATS{id_article,moyenne}
     204 */
     205function balise_STATS_dist($p) {
     206        if (isset($p->param[0][2][0])
     207        AND $nom = ($p->param[0][2][0]->texte)) {
     208                return calculer_balise_criteres($nom, $p, 'stats');
     209        }
     210        return $p;
     211}
     212
     213function calculer_balise_criteres($nom, $p, $balise="") {
    174214        $p->code = '';
     215        $balise = $balise ? $balise : $nom;
    175216        if (isset($p->param[0][1][0])
    176         AND $champ = ($p->param[0][1][0]->texte))
    177                 return rindex_pile($p, "compteur_$champ", 'compteur');
     217        AND $champ = ($p->param[0][1][0]->texte)) {
     218                return rindex_pile($p, $nom."_$champ", $balise);
     219        }
    178220  return $p;
    179221}
     222
    180223
    181224
  • _plugins_/_stable_/spip-bonux-2/public/spip_bonux_criteres.php

    r28042 r28174  
    7474                if ($op)
    7575                        $boucle->having[]= array("'".$op."'", "'compteur_".$table."'",$op_val);
     76        }
     77}
     78
     79
     80/**  Critere {somme champ} #SOMME{champ} */
     81function critere_somme($idb, &$boucles, $crit){
     82        calcul_critere_fonctions(array('SUM'=>'somme'), $idb, $boucles, $crit);
     83}
     84
     85/**  Critere {compte champ} #COMPTE{champ} */
     86function critere_compte($idb, &$boucles, $crit){
     87        calcul_critere_fonctions(array('COUNT'=>'compte'), $idb, $boucles, $crit);
     88}
     89
     90/**  Critere {moyenne champ} #MOYENNE{champ} */
     91function critere_moyenne($idb, &$boucles, $crit){
     92        calcul_critere_fonctions(array('AVG'=>'moyenne'), $idb, $boucles, $crit);
     93}
     94
     95/**  Critere {minimum champ} #MINIMUM{champ} */
     96function critere_minimum($idb, &$boucles, $crit){
     97        calcul_critere_fonctions(array('MIN'=>'minimum'), $idb, $boucles, $crit);
     98}
     99
     100/**  Critere {maximum champ} #MAXIMUM{champ} */
     101function critere_maximum($idb, &$boucles, $crit){
     102        calcul_critere_fonctions(array('MAX'=>'maximum'), $idb, $boucles, $crit);
     103}
     104
     105/**  Critere {stats champ} calcul la totale : somme, compte, minimum, moyenne, maximum */
     106function critere_stats($idb, &$boucles, $crit){
     107        calcul_critere_fonctions(array(
     108                'SUM'=>'somme',
     109                'COUNT'=>'compte',
     110                'AVG'=>'moyenne',
     111                'MIN'=>'minimum',
     112                'MAX'=>'maximum',
     113        ), $idb, $boucles, $crit);
     114}
     115
     116/* $func : array(FUNC => balise) */
     117function calcul_critere_fonctions($func, $idb, &$boucles, $crit) {
     118        $boucle = &$boucles[$idb];
     119        $_fusion = calculer_liste($crit->param[1], array(), $boucles, $boucle->id_parent);
     120
     121        $params = $crit->param;
     122        $champ = reset($params);
     123        $champ = $champ[0]->texte;
     124
     125        foreach ($func as $f => $as) {
     126                $boucle->select[]= "$f($champ) AS $as" . "_$champ";
    76127        }
    77128}
Note: See TracChangeset for help on using the changeset viewer.