Le premier affichage (trié par noms) est effectué par le <xslort select="..."/> après les <xsl:for-each select = "...">
Pour le tri via JS (et la je dévie un peu du sujet), voici le code
Pour le tri via JS (et la je dévie un peu du sujet), voici le code
Code PHP :
<?php
<script language="javascript" type="text/javascript">
//Variables statiques pour le tri
var toSort='';
var aSort=new Array();
function sort(x,v){
var a=new Array();
typSort=v;
var t=x.parentNode.parentNode;
//Détermination du sens de tri
if(!aSort[t.id]){
aSort[t.id]=new Array();
aSort[t.id][2]=1;
} else {
if(aSort[t.id][1]==x.cellIndex) {
aSort[t.id][2]*=-1;
} else {
aSort[t.id][2]=1;
}
}
aSort[t.id][1]=x.cellIndex
aSort[t.id][0]=x.cellIndex;
toSort=t.id;
//Passage de la table en tableau js
for(var r=1;r<t.rows.length;r++){
a[r-1]=new Array();
for(var c=0;c<t.rows[r-1].cells.length;c++){
a[r-1][c]=t.rows[r].cells[c].innerHTML;
}
}
//Tri effectif de la table
a.sort(sortTable);
//suppression des anciennes lignes
while(t.rows.length>1) t.deleteRow(t.rows[1].rowIndex);
//Réaffichage des nouvelles lignes
for(var r=0;r<a.length;r++){
nr=t.insertRow(r+1);
for(var c=0;c<a[r].length;c++){
nc=nr.insertCell(c);
nc.innerHTML=a[r][c];
}
}
}
//Fonction de tri custom
function sortTable(e1,e2){
if(typSort==0){
if(stripHTML(e1[aSort[toSort][0]]) >= stripHTML(e2[aSort[toSort][0]])){
r=1;
} else {
r=-1;
}
} else {
r=e1[aSort[toSort][0]] - e2[aSort[toSort][0]]
}
return r * aSort[toSort][2];
}
//Suppression des tags HTML pour trier sur la valeur Text réelle
function stripHTML(oldString) {
return oldString.replace(/<[^>]*>/g, "");
}
</script>
J'ai mis un onClick() sur les entêtes de colonne qui prends comme premier paramètre l'objet appelant (this) et en second 0 si on trie par ordre Alpha ou 1 pour un tri numérique.
Attention, c'est une fonction toute pourrie qui ne fait que conserver la valeur des cellules, pas leur mise en forme.