Changeset 25693 in spip-zone


Ignore:
Timestamp:
Jan 2, 2009, 9:16:51 PM (13 years ago)
Author:
cedric@…
Message:

un critere {tri} et une balise homonyme #TRI sur le modele de #PAGINATION pour permettre de faire des listes triables facilement.

Exemple :
<B_articles>
<p class='pagination'> #TRI{<,croissant} | #TRI{>,decroissant} | #TRI{titre,Titre} | #TRI{id_article} | #TRI{date}</p>
<p class='pagination'>[(#PAGINATION)]</p>
<ul>
<BOUCLE_articles(ARTICLES){pagination}{tri titre,inverse}>
<li>#ID_ARTICLE, #TITRE, #DATE</li>
</BOUCLE_articles>
</ul>
</B_articles>

Syntaxe du critere {tri} :

  • {tri [champ_par_defaut][,sens_par_defaut][,nom_variable]}
  • champ_par_defaut : un champ de la table sql
  • sens_par_defaut : -1 ou inverse pour decroissant, 1 ou direct pour croissant
  • nom_variable : nom de la variable utilisee (par defaut tri_nomboucle)
  • {tri titre}
  • {tri titre,inverse}
  • {tri titre,-1}
  • {tri titre,-1,truc}

Syntaxe de la balise #TRI :

  • #TRI{champ[,libelle]}
  • champ prend < ou > pour afficher le lien de changement de sens
  • croissant ou decroissant
Location:
_plugins_/_stable_/spip-bonux-2/public
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/spip-bonux-2/public/spip_bonux_balises.php

    r24179 r25693  
    177177}
    178178
     179
     180/**
     181 * #TRI{champ[,libelle]}
     182 * champ prend < ou > pour afficher le lien de changement de sens
     183 * croissant ou decroissant
     184 *
     185 * @param unknown_type $p
     186 * @param unknown_type $liste
     187 * @return unknown
     188 */
     189function balise_TRI_dist($p, $liste='true') {
     190        $b = $p->nom_boucle ? $p->nom_boucle : $p->descr['id_mere'];
     191
     192        // s'il n'y a pas de nom de boucle, on ne peut pas trier
     193        if ($b === '') {
     194                erreur_squelette(
     195                        _T('zbug_champ_hors_boucle',
     196                                array('champ' => '#TRI')
     197                        ), $p->id_boucle);
     198                $p->code = "''";
     199                return $p;
     200        }
     201        $boucle = $p->boucles[$b];
     202
     203        // s'il n'y a pas de tri_champ, c'est qu'on se trouve
     204        // dans un boucle recursive ou qu'on a oublie le critere {tri}
     205        if (!isset($boucle->modificateur['tri_champ'])) {
     206                erreur_squelette(
     207                        _T('zbug_tri_sans_critere',
     208                                array('champ' => '#TRI')
     209                        ), $p->id_boucle);
     210                $p->code = "''";
     211                return $p;
     212        }
     213
     214        $_champ = interprete_argument_balise(1,$p);
     215        // si pas de champ, rien a faire !
     216        if (!$_champ){
     217                $p->code = "''";
     218                return $p;
     219        }
     220       
     221        $_libelle = interprete_argument_balise(2,$p);
     222        $_libelle = $_libelle?$_libelle:$_champ;
     223        // si champ = "<" c'est un lien vers le tri croissant : 1<2<3<4 ... ==> 1
     224        // si champ = ">" c'est un lien vers le tri decroissant :.. 4>3>2>1 == -1
     225        $_issens = "in_array($_champ,array('<','>'))";
     226        $_sens = "(strpos('> <',$_champ)-1)";
     227       
     228        $_variable = "((\$s=$_issens)?'sens':'tri').".$boucle->modificateur['tri_nom'];
     229        $_url = "parametre_url(self(),$_variable,\$s?$_sens:$_champ)";
     230        $_on = "\$s?(".$boucle->modificateur['tri_sens']."==$_sens".'):('.$boucle->modificateur['tri_champ']."==$_champ)";
     231       
     232        $p->code = "aoustrong($_url,$_libelle,$_on)";
     233        //$p->code = "''";
     234        $p->interdire_scripts = false;
     235        return $p;
     236}
     237
    179238?>
  • _plugins_/_stable_/spip-bonux-2/public/spip_bonux_criteres.php

    r23874 r25693  
    7676}
    7777
     78/**
     79 * {tri [champ_par_defaut][,sens_par_defaut][,nom_variable]}
     80 * champ_par_defaut : un champ de la table sql
     81 * sens_par_defaut : -1 ou inverse pour decroissant, 1 ou direct pour croissant
     82 * nom_variable : nom de la variable utilisee (par defaut tri_nomboucle)
     83 *
     84 * {tri titre}
     85 * {tri titre,inverse}
     86 * {tri titre,-1}
     87 * {tri titre,-1,truc}
     88 *
     89 * @param unknown_type $idb
     90 * @param unknown_type $boucles
     91 * @param unknown_type $crit
     92 */
     93function critere_tri_dist($idb, &$boucles, $crit) {
     94        $boucle = &$boucles[$idb];
     95
     96        // definition du champ par defaut
     97        $_champ_defaut = !isset($crit->param[0][0]) ? "''" : calculer_liste(array($crit->param[0][0]), array(), $boucles, $boucle->id_parent);
     98        $_sens_defaut = !isset($crit->param[1][0]) ? "1" : calculer_liste(array($crit->param[1][0]), array(), $boucles, $boucle->id_parent);
     99        $_variable = !isset($crit->param[2][0]) ? "'$idb'" : calculer_liste(array($crit->param[2][0]), array(), $boucles, $boucle->id_parent);
     100
     101        $_tri = "((\$t=(isset(\$Pile[0]['tri'.$_variable]))?\$Pile[0]['tri'.$_variable]:$_champ_defaut)?preg_replace(',[^\w],','',\$t):'')";
     102        $_sens ="((intval(\$t=(isset(\$Pile[0]['sens'.$_variable]))?\$Pile[0]['sens'.$_variable]:$_sens_defaut)==-1 OR \$t=='inverse')?-1:1)";
     103
     104        $boucle->modificateur['tri_champ'] = $_tri;
     105        $boucle->modificateur['tri_sens'] = $_sens;
     106        $boucle->modificateur['tri_nom'] = $_variable;
     107        // faut il inserer un test sur l'existence de $tri parmi les champs de la table ?
     108        // evite des erreurs sql, mais peut empecher des tri sur jointure ...
     109        $boucle->hash .= "
     110        \$senstri = '';
     111        \$tri = $_tri;
     112        if (\$tri){
     113                \$senstri = $_sens;
     114                \$senstri = (\$senstri<0)?' DESC':'';
     115        };
     116        ";
     117        $boucle->order[] = "\$tri.\$senstri";
     118}
    78119
    79120?>
Note: See TracChangeset for help on using the changeset viewer.