Je préférerai éviter de mélanger PHP et Javascript autant que possible mais c’est vrai que la possibilité de trier avec les entêtes de colonne est bien pratique.
Tes données viennent directement de l’API ou d’une autre source ?
Je préférerai éviter de mélanger PHP et Javascript autant que possible mais c’est vrai que la possibilité de trier avec les entêtes de colonne est bien pratique.
Tes données viennent directement de l’API ou d’une autre source ?
Toutes les données viennent de l’API. J’ai fait une librairie open source pour l’exploiter. https://gitlab.com/al37350/ffttAPI
Pour moi le plus simple pour trier en PHP est d’avoir un tableau d’objet ou un tableau de tableau et en utilisant la fonction usort cela devrait être bon.
Je vais regarder tout ça
Bon, j’ai jeté un coup d’oeil et c’est manifestement quelques levels au-dessus de mon niveau
Surtout, je n’y ai pas trouvé de réponse à ma problématique de tableau issu de l’API
@archeo, Bonjour.
Je lus ta demande et une partie correspond à ce que je fais sur “mon” site du club.
Je récupère les licenciés validés par la FFTT puis je l’ai enregistre dans une table. Avec une requête SQL correctement formatée, tu peux faire les tris que tu souhaites pour affichage.
Première question, est-ce que ton site permet la gestion d’une base de données (MySQL, MariaDB, …) ?
Deuxième question, est-ce que tu utilises un CMS ?
Salut @Lionel60
Je ne souhaite pas faire une copie des données dans ma base de données sinon, effectivement, je ne me serai pas heurté à ces difficultés, ni pour le tri (grâce à SQL) ni dans la présentation des tableaux.
Le site est sous PHPMyAdmin/MySQL et on tourne avec Wordpress. Pour l’instant, je fais mes petits tests sur une page externe mais le but sera de faire rentrer ça dans le site quand ça sera opérationnel. Je l’ai déjà fait sur un autre site, ça ne pose pas de difficultés particulières si ce n’est parfois un peu de “cosmétique” lié au thème utilisé par le site.
As tu regardé ca? https://fr.wordpress.org/plugins/wp-api-fftt/
Je ne l’ai jamais essayé mais ca semble faire le travail en tant que plugin wordpress.
Dans ce topic ou dans un autre, j’avais effectivement vu ce plugin mais il ne semble plus maintenu et je ne sais pas s’il était abouti au sens où il s’agit d’une version 0.2.3 donc loin d’une version définitive.
La numérotation des versions n’est pas une science exacte
Il utilise des tables triables de JQuery pour l’affichage des joueurs. Et c’est du php…
Je regarderai
Hello @archeo ! J’ai fait quelques suppositions sur le format exact des données mais je pense être pas trop loin de la vérité, tu ajusteras si besoin
Voilà une suggestion. En fait, tu as une structure qui contient une clef “joueur” dans laquelle se trouve un tableau d’objets représentant chacun un joueur. Chacun de ces joueurs est modélisé sous forme d’un tableau avec les clefs “licence”, “nom”, “prenom”, “club”, “nclub”. Je ne connais pas très bien PHP et c’est peut-être pas la façon la plus simple de faire, mais voilà ce que j’ai fait.
<?php
// Je pense que tes données ressemblent à peu près à ça ?
$loaded_from_xml = [
"joueur" => [
[
"licence" => 5010505,
"nom" => "CHERON",
"prenom" => "Anthony",
"clast" => 7
],
[
"licence" => 3516685,
"nom" => "HURAUX",
"prenom" => "Alexandre",
"clast" => 9
],
[
"licence" => 509003,
"nom" => "MOREL",
"prenom" => "Stéphane",
"clast" => 8
],
[
"licence" => 3522788,
"nom" => "RESTOUX",
"prenom" => "Sylvain",
"clast" => 8
],
]
];
// Cette fonction permet de comparer 2 objets joueurs.
// Elle renvoie 1, -1 ou 0 en fonction de l'ordre souhaité
// Tu trouveras des ressources là-dessus facilement,
// ça existe dans tous les langages depuis lgtps
//
// Si les 2 objets sont "équivalents" pour le tri, je renvoie 0
// Sinon, je renvoie 1 ou -1 en fonction de l'ordre souhaité
function compare($a, $b) {
if($a["clast"] == $b["clast"])
return 0;
return $a["clast"] > $b["clast"] ? 1 : -1;
}
// Tableau de joueurs avant tri
print_r($loaded_from_xml["joueur"]);
// Tri du tableau : on passe en 1er param le tableau qu'on veut trier,
// et en second param la fonction de comparaison définie ci-dessus
// elle va être utilisée par PHP pour déterminer comment trier 2 à 2
// les éléments qui sont dans le tableau passé en premier paramètre
usort($loaded_from_xml["joueur"], compare);
// Tableau de joueurs après tri
print_r($loaded_from_xml["joueur"]);
?>
https://www.php.net/manual/fr/function.usort.php
À noter que ça fait un tri “en place”, càd que ça modifie le tableau original (y compris ici alors que le tableau que je tri appartient lui-même à un autre objet, j’ai trouvé ça surprenant mais pourquoi pas).
En espérant t’avoir aidé
Tout d’abord, merci à @PierreAd et @al37350 pour leur aide. Les solutions fournies permettent effectivement d’une part de “sortir le tableau du tableau” et d’autre part de trier en fonction d’une colonne de son choix. Merci à vous.
Par contre, il y a un truc que je ne comprends pas et ça commence à m’agacer
Ces données, triées, je veux les afficher dans un tableau HTML avec de classiques balises table, tr, td et consorts. Quand je prends comme source les données XML issues de l’API ( avec $licencies = simplexml_load_string($result5);
), aucun problème pour afficher le tableau. Certes, non trié, mais au moins, il y a des éléments dans le tableau.
Or, quand je prends le “tableau sorti du tableau” à l’aide de $resultat = $licencies[joueur];
et que j’essaye donc d’afficher l’array $resultat au lieu de l’array $licencies, et bien aucun ligne ne s’affiche. C’est à n’y rien comprendre
J’utilise une boucle foreach qui normalement est adaptée à ça mais pourquoi ça marche avec un tableau et pas l’autre, ça m’échappe.
foreach($resultat as $value) {
$licence=$value->licence;
$nom=$value->nom;
$prenom=$value->prenom;
$clast=$value->clast;
echo '<tr style="font-size: 11px; height: 20px">';
echo '<td>'.$licence.'</td>';
echo '<td>'.$nom.'</td>';
echo '<td>'.$prenom.'</td>';
echo '<td>'.$clast.'</td>';
echo '</tr>';
}
As-tu essayé un echo $value
pour voir ce que contient ta variable ? Ça pourrait te donner une indication sur ce qu’il se passe (peut-être). Il est possible aussi que tu doives accéder au nom/prénom avec la notation $value["licence"]
car les joueurs ne sont plus un “objet” qui répond à des méthodes/qui possède des attributs (je pense que c’est ça que tu obtiens quand tu utilises un simplexml_load_string
) mais un tableau classique avec des index.
Bon, j’ai pu trouver la solution sur un forum PHP, il fallait que je remplace
$licence=$value->licence;
par
$licence=$value['licence'];
Depuis hier, il faut attendre 10 secondes (parfois 40s !) avant de recevoir le résultat de certaines API FFTT ! Ce n’est pas général mais cela devient inutilisable. C’est le cas notamment pour l’initialisation qui dure systématiquement 10s.
D’autres personnes ont rencontré ce problème ?
EDIT : il y a clairement des problèmes avec les API FFTT. Une plainte à cause d’une maintenance il y a 5 mn dans un autre sujet (Site FFTT) et l’appli FFTT sur mon téléphone qui ne récupère aucune donnée avec des erreurs de type Time out. On va attendre des jours meilleurs…
Après il y a peut être maintenant “un peu trop de monde” qui commence à utiliser ces APIs et coté serveur FFTT celà ne tient pas la charge (on n’est pas en face de Google ou Amazon)
Le changement est brutal : service normal jusqu’à hier où je me prends au moins 10s d’attente un appel sur deux. Je pense plutôt à une maintenance ou un problème qui devrait être rapidement réglé (j’espère !). Je vais attendre demain pour voir si cela revient à la normale. Sinon, j’enverrai un mail à la FFTT pour demander des explications. Surtout que l’on a une journée de championnat vendredi et qu’il va falloir que GIRPE fonctionne bien d’ici là.
J’utilise l’API pour l’inscription à notre tournoi. Dès qu’on saisi son n° de licence, ça appelle l’API pour récupérer quelques infos comme Nom, Prénom, Classement, Club, etc… et je viens de faire le test à l’instant, le délai de réponse est normal
Par ailleurs, il y a manifestement des travaux sur le site de la FFTT ces derniers jours, c’est peut être en lien ?
En effet, j’avais retesté vers 11h30 et j’avais retrouvé un temps de réponse normal.
Ben… C’est bien ce que je t’avais écrit dans mon message ci-dessus donc