Tri d'un tableau HTML par colonne

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Tri d'un tableau HTML par colonne

par agité » 23 mai 2008, 10:44

je remonte un peu ce vieux post ....

pour avoir mis en place tablesorter sur un extranet c'était au debut trèèèèèss pratique, mais plus ca avance plus je trouve que cette outil n'est pas adapté.

1) Impossible d'enregistrer les tri si on reviens sur la page
2) Un gros problème pour que les tri se fasses correctement
3) Impossible de trier des dates ...

Pour le 2) l'exemple le plus concret est qu'il faut a tout prix mettre :

001
002
003
100
101

les 00 sont obligatoire devant le 1 sinon il tri n'importe comment ... c'est plutôt embetant.

Mais pour les dates la je suis dans l'incapacité de faire un tri ... je suis bloqué car le script est mis en place et tourne pour le moment et on me retourne que les dates sont impossibles a trier.

J'ai donc tester 2 méthodes :

1) trier par aa/mm/jj au format anglais
2) trier par jj/mm/aa au format francais

pour les 2 impossible, le tri fait n'importe quoi ... et je ne vois pas comment faire pour avoir un tri correct avec les dates ...

par steph29 » 17 janv. 2008, 11:44

je precise ma reponse alors :twisted:

En regle generale pour les tris de tableau, je le fait systematiquement au niveau de la requete donc methode standard avec php modif du filtre et tout le toutim et rechargement de page (voire des fois maj en ajax)

mais pour aller plus vite et par facilite, sur les projets rapide un petit coup de tablesorter (que j'ai decouvert il y a peu de temps ici) pour alleger les temps de dev, mais je l'accorde c'est un peu plus lourd (surtout si petite connection et encore plus quand il y a un grand nombre d'enregistrement)

la le but est de montrer qu'il y a aussi l'alternative poste client (javascript) pour pouvoir trier des tableaux dont tablesorter qui amha est plsu pro et facile a installer (bonne doc et foultitude de cas)

par Berzemus » 17 janv. 2008, 11:29

Tu as entièrement raison: si on utilise déjà un framework ce serait dommage de se priver de ses atouts, tout comme la multiplication ne peu qu'engendrer des complications inutiles. Et on peut tout aussi bien décider de ne pas utiliser des framework du tout, pour rester "pur" (mais c'est dommage de s'en priver).

Mais moi, j'ai steph qui est d'accord avec moi. :wink:

par Ryle » 16 janv. 2008, 18:06

Peut être mais sortTable conserve un tri ascendant par défaut lorsque tu changes de colonne de tri alors que ton Tablesorter inverse à chaque fois le sens sans se soucier d'un changement de colonne :P

Plus sérieusement, faut pas installer un script parce qu'il fait plus de chose qu'un autre (sinon j'en ai plein à te faire installer ;)), il faut installer le script qui fait ce dont on a besoin (et accessoirement, celui qui est adapté à son framework : s'il utilise jquery, ce serait effectivement dommage de se priver de tablesorter, mais s'il utilise une autre librairie, ce serait encore plus dommage de commencer à les cumuler :))

par steph29 » 16 janv. 2008, 17:50

+1 pour tablesorter :wink:

par Berzemus » 16 janv. 2008, 17:46

Tablesorter permet de trier plusieurs colonnes.. :twisted:

par VaN » 16 janv. 2008, 15:40

Franchement Ryle, merci pour cette URL, ce script est genial. Quelques modifs extrement faciles à appliquer, et je me retrouve avec un tableau totalement triable qui a énormement de gueule, le tout géré à 100% coté client.

Hop, direct en Marque-Pages, en 3 minutes, c'est devenu un must-have pour tous mes prochains projets :)

par Berzemus » 16 janv. 2008, 11:49

Il y a aussi le très bon plugin tablesorter pour jquery..

par dogmongo » 16 janv. 2008, 01:52

J'ai dis une betise tu as besoin d'un seul fichier puisque le champ qui donne l'ordre peu etre passé en Variable

l'action de l'urilisateur

Code : Tout sélectionner

<a href="#" onClick="Order()">login</a>
champ représente la variable machin bidule ou autre

la fonction ajax

Code : Tout sélectionner

xhr.open("POST","traitement-interne-de-la-requete.php",true); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); sel = document.getElementById(champ); champ = sel.options[sel.selectedIndex].value; xhr.send("champ="+champ);
traitement-interne-de-la-requete.php

Code : Tout sélectionner

if(isset($_POST["champ"])){ $sql = "SELECT * FROM users ORDER BY $_POST["champ"] "; ........... etc ...... // ici tu renvoi le résultat sur la page d'origine echo "<div id='texte'> le nouveau tableau repart sur la page d'origine </div>"; }

par dogmongo » 16 janv. 2008, 01:36

Bonjour,

Peu être Ajax ? ca éviterai de traiter les conditions, tu crée autant de fichier que de critère, et c'est uniquement en temps réelle que la requête de l'utilisateur sera prit en compte.

S’il clique sur le lien login c'est uniquement login qui sera traité par un fichier qui traite uniquement la requête avec ORDER BY login.

Ensuite tu y gagneras en fluidité vu que la page ne se réactualisera pas

Cela dit ce n’est pas tout à fait la vraie utilisation Ajax mais une utilisation dérivé de celui-ci pour ne pas fâcher les puristes, en tout cas je suis pratiquement certain qu’il serait la solution dans le cas présent.

par VaN » 16 janv. 2008, 01:11

ok, je comprends un peu mieux, merci : )

Là il est un peu tard pour me replonger dans le script, je m'y remet demain, et je reviens poster si je bute sur quelque chose.

Merci bien.

par Ryle » 16 janv. 2008, 00:14

Voici quelques exemples de tableaux triables avec javascript, une petite recherche sur google avec le mot clé "sortable" t'en proposera bien d'autres :)
http://www.kryogenix.org/code/browser/sorttable/
http://www.pascarello.com/sortTable/

Quant au booléen, l'idée est simplement dans le lien que tu cliques pour changer l'ordre du tableau de rajouter un paramètre qui aura par exemple pour valeur true/false ou 1/0 (php affichant 1 quand tu lui demandes d'afficher la valeur d'un booléen vrai) selon que le tri soit descendant ou ascendant (par défaut). Supposons le lien :
href="script.php?column=name&order=1"
Tu récupère alors $_GET['column'] avec le nom de la colonne et $_GET['order'] qui sera à 1 pour un tri DESC ou à 0 pour un ASC. Il te suffit donc d'un simple if() pour ajouter le mot clé adéquat dans ta requête et d'un point d'exclamation pour inverser la valeur booléenne et proposer l'ordre inverse dans ton lien :
<?php
$order = isSet($_GET['order']) ? $_GET['order'] : false;
...
$sql = "SELECT ... ORDER BY machin " . ($order ? 'DESC':'ASC');
?>
... href="script.php?column=name&order=<?php echo !$order;?>" ...
Bon là c'est la version basique et certains raleront sans doute quant à ma syntaxe et le fait de tester une variable sans la comparer à quelque chose, mais t'as les grandes lignes :) Après j'ai tendance à compléter le test en ne proposant le tri inversé que sur la colonne sélectionnée afin que les autres proposes toujours l'ascendant par défaut quand on change de colonne de tri...

par AB » 15 janv. 2008, 20:28

A vrai dire, je ne sais pas encore si y'aura un systeme de pagination ou non. Ca va dependre des besoins de mon client. A priori, je dirai que non.
merci deja pour cette reponse : )
Oui mais fait attention quand même car parfois les clients peuvent changer d'avis, ou les besoins peuvent évoluer en fonction du nombre des données.

par VaN » 15 janv. 2008, 20:05

A vrai dire, je ne sais pas encore si y'aura un systeme de pagination ou non. Ca va dependre des besoins de mon client. A priori, je dirai que non.

Tu aurai des exemples de script javascript dont tu parles ?

Et pourrais-tu egalement m'expliquer brievement ton idée de booleen ? (c'est quelque chose que je n'utilise jamais)

merci deja pour cette reponse : )

par Ryle » 15 janv. 2008, 19:39

Si tu n'utilises pas de pagination et que toutes tes données sont sur une même page, il existe des librairies javascript assez extra pour ce genre de chose :)

Personnellement, ne sachant généralement si j'aurais une ou plusieurs pages, j'opte pour la première de tes solutions, laissant le soin à la bdd de m'ordonner les éléments pour que php n'ait plus qu'à les afficher.
Pour le sens, il suffit d'une donnée booléenne que tu inverseras à chaque fois et qui te permettra de savoir si le tri est ascendant ou descendant :)

Pour le tri sur le tableau php, c'est faisable, mais c'est un tri sur un tableau multi-dimensionnel, donc un peu plus compliqué et plus long qu'un simple sort()... ça dépend donc également de la quantité de données, mais l'avantage c'est que tu peux coller ton tableau en session et y accéder plus rapidement pour de la pagination par exemple :)