Utiliser la balise #TRI et le critère ’tri’ dans les squelettes

Préambule

Le plugin « spip-bonux » améliore et facilite les tris dans les tableaux de résultats. Il met en jeu deux nouveaux outils :
-  un critère tri à placer dans vos boucles, et qui peut éventuellement être utilisé seul
-  une balise #TRI à placer dans vos squelettes, et qui génère des liens permettant de changer le sens des tris d’un tableau

Il s’agit d’une alternative incontournable au système jquery de tri « Table Sorter ».

Utilisation du critère « tri » dans une boucle

Le critère ’tri’ peut être utilisé dans une boucle de la manière suivante :

<BOUCLE_test(ARTICLES){tri #ENV{order,champ},#GET{defaut_tri}}>

Les 2 paramètres principaux à passer au critère tri sont les suivants :
1. le champ sur lequel le tri s’effectue ; dans notre cas le tri s’effectue sur la variable « order » contenue dans #ENV (#ENV{order}), et si celle-ci n’existe pas, sur le champ « champ »
2. le sens du tri : cela peut être défini dans un tableau contenant les champs sur lesquels le tri peut s’effectuer et leur sens de tri par défaut

On peut passer un 3e paramètre qui est le nom de la variable (par défaut : tri_nomboucle).

Utilisation de la balise #TRI dans un squelette

La balise #TRI est remplacée lors du calcul de la page par un lien permettant de changer le paramètre « order » dans le #ENV. Elle s’utilise de la manière suivante (exemple dans une boucle contenant un champ id_commande) :

[(#TRI{id_commande,Numero Commande,ajax})]

Les 3 paramètres à passer à la balise #TRI sont les suivants :
1. le champ sur lequel le tri doit s’opérer
2. le titre du lien sur lequel il faudra cliquer pour recharger la page avec le paramètre order=champ
3. si ’ajax’ est spécifié en tant que 3e paramètre, on évite un recalcul total de la page lorsqu’on clique sur le lien.

Méthode opératoire : combinaison filtre ’tri’ + balise #TRI

Charger le plugin « spip-bonux »

Une fois le plugin installé [1], bien vérifier que les scripts ont été chargés dans le squelette (une balise #INSERT_HEAD bien placée, suffit la plupart du temps).

Décrire le tri par défaut désiré

Placer au début du squelette la définition du tri par défaut.

Par exemple, pour que le tri du tableau s’effectue, dans l’ordre : sur le id_parent, le id_organisation et le id_rubrique, indiquer :

[(#SET{defaut_tri,#ARRAY{
    id_parent,1,
    id_organisation,1,
    id_rubrique,1
}})
]


-  les clés du tableau sont les noms des champs sur lesquels s’opère le tri
-  les valeurs du tableau valent : 1 pour un tri ascendant, et -1 pour un tri descendant.

Indiquez les critères de tri dans la boucle

Par exemple, pour être en mesure de trier la boucle (complexe...) suivante par parent, organisation et rubrique, indiquez ces champs dans les critères de la boucle :

<BOUCLE_rubriques(RUBRIQUES organisations_liens organisations)
    {recherche ?}
    {id_parent IN 42, 43, 76, 38}
    {id_organisation ?}
    {tri #ENV{order,id_rubrique},#GET{defaut_tri}}
    {pagination #ENV{nb,20}}>

Autre exemple, pour pouvoir trier la boucle « factures » suivante, par date, numéro ou libellé :

<BOUCLE_ff(FACTURES actions)
    {num_facture ?}
    {libelle_facture ?}
    {actions.id_projet}
    {doublons}
    {tri #ENV{order,date_facture},#GET{defaut_tri}}
    {pagination 10}>

Insérez la balise #TRI sur les colonnes pouvant être triées

Si votre liste est contenue par un tableau html, le déclenchement du tri peut être obtenu en cliquant sur le titre des colonnes. Il faut donc placer la balise #TRI dans le <th> de chaque colonne. La balise #TRI, qui génère le lien, s’utilise de la manière suivante :
#TRI{champ[,libelle][,ajax]}.

Pour le cas précédent, où l’on doit trier par parent, id_rubrique ou organisation, voici le code de l’entête du tableau :

<thead>
    <tr>
    	<th>[(#TRI{id_parent,Type,ajax})]</th>
        <th>[(#TRI{id_rubrique,Rubrique,ajax})]</th>
        <th>[(#TRI{id_organisation,Organisation,ajax})]</th>
    </tr>
</thead>

En complément

Les fonctionnalités de la balise #TRI, définies dans BONUX pour SPIP 2, sont inclues en standard dans la version 3.0 de SPIP.

Voici le lien vers des explications complémentaires jointes au commit de la balise et du critère
-  dans BONUX : http://zone.spip.org/trac/spip-zone/changeset/25693
-  dans SPIP3 : http://core.spip.org/projects/spip/repository/revisions/16053

N’hésitez pas à publier d’autres exemples de boucles dans le forum.

Autres exemples :

[(#ENV{sens_reglements}|=={-1}|non)
	[(#TRI{'>',#CHEMIN{img_pack/tri_asc-16.png}|balise_img{up}|inserer_attribut{class,on},ajax})]
]
[(#ENV{sens_reglements}|=={-1}|oui)
	[(#TRI{'<',#CHEMIN{img_pack/tri_desc-16.png}|balise_img{down}|inserer_attribut{class,on},ajax})]
]

[(#ENV{tri_factures}|=={num_facture}|oui)
        [(#ENV{sens_factures}|=={-1}|non)[(#TRI{'>',#CHEMIN{img_pack/tri_asc-16.png}|balise_img{up}|inserer_attribut{class,on},ajax})]]
        [(#ENV{sens_factures}|=={-1}|oui)[(#TRI{'<',#CHEMIN{img_pack/tri_desc-16.png}|balise_img{down}|inserer_attribut{class,on},ajax})]]
        ]
[(#ENV{tri_factures}|=={date_facture}|oui)
        [(#ENV{sens_factures}|=={-1}|non)[(#TRI{'>',#CHEMIN{img_pack/tri_asc-16.png}|balise_img{up}|inserer_attribut{class,on},ajax})]]
        [(#ENV{sens_factures}|=={-1}|oui)[(#TRI{'<',#CHEMIN{img_pack/tri_desc-16.png}|balise_img{down}|inserer_attribut{class,on},ajax})]]
        ]
[(#ENV{tri_factures}|=={montant}|oui)
        [(#ENV{sens_factures}|=={-1}|non)[(#TRI{'>',#CHEMIN{img_pack/tri_asc-16.png}|balise_img{up}|inserer_attribut{class,on},ajax})]]
        [(#ENV{sens_factures}|=={-1}|oui)[(#TRI{'<',#CHEMIN{img_pack/tri_desc-16.png}|balise_img{down}|inserer_attribut{class,on},ajax})]]
        ]

Notes

[1Pour un SPIP 2, ce fonctionnement est natif en SPIP 3.

Discussion

6 discussions

  • bonjour,
    existe-t-il la possibilité de trier pour une même colonne, deux champs distincts ?

    #TRI{{descriptif, titre},'mon tri'} ne fonctionne pas ;(

    Répondre à ce message

  • latitlolo

    Bonjour,

    Comment vous y prenez vous pour internationaliser le libellé de tri
    [(#TRI{id_parent,'Mon critère de tri',ajax})] ?

    Merci

    Répondre à ce message

  • Bonjour,

    En reprenant l’exemple :

    [(#SET{defaut_tri,#ARRAY{
        date,1,
        titre,1   
    }})
    ]

    ...Un tri avec date,-1, me donne le même résultat qu’un tri avec date,1. Il n’y a pas d’inversion. Est-ce normal ?

    Répondre à ce message

  • <th>[(#TRI{id_parent,Type,ajax})]</th> : que se passe t-il quand Bonux est désactivé ou désinstallé ? :-$

    Répondre à ce message

  • En fait j’ai l’impression que c’est une possibilité des tris pour SPIP3 que tu décris là. Il me semble que le plugin pour spip2 est peu plus simple en ce qu’il ne permet pas de passer un tableau en valeur du critère tri, comme tu le fais dans cet exemple.

    C’est spip3 que tu utilises pour ces exemples ?

    Répondre à ce message

  • Est ce qu’il est possible de se servir de cela pour faire un tri sur un agenda, par exemple, lorsqu’il y a beaucoup de dates en triant sur les rubriques ou sur des mots clés ?

    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 :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

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.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom