Alors je t'avais fait un message qui explique tout bien etc, sur l'un des autres sujet que tu as ouvert ... qui a été fermer entre temps par la modérations (du coup j'ai "perdu" le gros pavé que je t'avais fait).
Et j'ai la flemme de recommencer, donc si tu as des questions sur le code javascript n'hésite pas (normalement il est suffisamment commenter)
Donc, voici le JSON que j'ai utiliser pour mes essaie :
Et enfin, le code javascript qui répondra a ta question :
const fetch= (callback)=> {
$.ajax({
url: "http://alexis/test/fetch.json",
method:"GET",
dataType: "json",
success: callback
});
};
const splitOfWith= (tableau, property)=> {
let listOfArray= {};
for(let a=0;a<tableau.length;a++) {
//Je récupére la valeur de la propriètès selon laquel
//on doit faire le regroupement dans une variable.
let currentProperty= tableau[a][property];
//si dans mon objet "listOfArray" je n'ai pas cette propriètès alors je la crée
//pour eviter les erreurs de déclaration.
if(!listOfArray.hasOwnProperty(currentProperty)) {
listOfArray[currentProperty]= [];
}
//Ensuite je rajoute tout simplement l'objet complet dans le tableau ainsi défini.
listOfArray[currentProperty].push(tableau[a]);
} return listOfArray; //Je renvoie un objet regrouper par valeur de property
};
//Lorsque le document est prêt je commence a rajouter mon arbre :
$(document).ready(()=> {
//J'utilise la fonction crée pour la requete ajax afin de récupéré mon JSON.
fetch((monJson)=> {
//Je regroupe en fonction du client grace a la fonction splitOfWith.
let objetOfClient= splitOfWith(monJson, 'client');
//Puis je le parcours "a l'aveugle"
for(let client in objetOfClient) {
//Ensuite je regroupe en fonction de la date
let objetOfDate= splitOfWith(objetOfClient[client], 'date');
//J'injecte dans le HTML le client :
$('#treeview').append($('<h1/>', {
'text': `------${client}`
}));
//Je parcours le resultat
for(let date in objetOfDate) {
//On regroupe a nouveau, par destination
let objetOfDestination= splitOfWith(objetOfDate[date], 'destination');
//je crée une date javascript avec le timestamp :
let thisDate= new Date(parseInt(date));
//J'injecte la date :
$('#treeview').append($('<h4/>', {
'text': `${thisDate.getDate()}/${thisDate.getMonth()+1}/${thisDate.getFullYear()}`
}));
//Et on parcours le resultat
for(let destination in objetOfDestination) {
//Je stocke dans une variable juste pour avoir un nom de variable plus court
let endTab= objetOfDestination[destination];
//On injecte la destination :
$('#treeview').append($('<p/>', {
'text': `---${destination}`
}));
//Et enfin, je parcours les tableau sans les regrouper pour afficher les autre valeurs :
for(let index in endTab) {
//En enfin, on injecte l'id, le fichier et le type de fichier :
//par simpliciter je crée un tableau avec les trois
//et je le join() avec un saut de ligne.
let lesTrois= [`------${endTab[index]['id']}`, `------${endTab[index]['fichier']}`, `------${endTab[index]['type-fichier']}`];
$('#treeview').append($('<pre/>', {
'text': lesTrois.join('\n')
}));
}
}
}
//J'injecte une séparation juste avant le changement de client,
//Pour avoir un affichage un peu plus claire
$('#treeview').append($('<hr/>'));
}
});
});
Edit: et le résultat obtenu :
- Edité par Angelisium 13 décembre 2018 à 18:35:19
merci Angelisium pour ta réponse ,étant un petit peu debutant en javascript j'ai pas vraiment compris le script mais pour le résultat final ,je dois l'avoir comme cette photo
en changeant usa canada et Australia par des dates et dedans on trouve la destination et dedans on trouve les fichiers c'est un tableau arbre et j'aimerais le faire avec php et le résultat en json . et merci infiniment pour ton temps et ta patience.
Tu crée un array avec tout les objets que tu récupère dans ta BDD et ensuite tu utilise ma fonction comme ceci :
$arrayByDate= splitOfWith($tonArray, 'date');
Ensuite tu utilise foreach(... in ...)sur le résultat de ma fonction et tu l'enregistre dans un objet comme ceci :
$monObjetFinal= array();
foreach... { #je te laisse le compléter correctement
$monObjetFinal[]= array();
#ensuite re foreach etc etc
}
Si j'ai le temps je te ferais peut-être un exemple + complet (mais en gros c'est juste une convertion de mon code JS vers du PHP, et au lieu d'afficher du HTML tu enregistre dans un objet... basique quoi
Comme je n'ai pas mon environnement PHP sous la main (seulement node.js) j'ai travailler la fonction en javascript. Fort heureusement je n'utilise aucune fonction propre a javascript, tu n'aura donc aucun mal a faire la conversion vers PHP.
Voici la nouvelle fonction (javascript ducoup) :
var regroupe= (arr, prop)=> {
let tempo= {};
for(let a=0;a<arr.length;a++) {
let cP= arr[a][prop[0]];
if(!tempo.hasOwnProperty(cP)) {
tempo[cP]= [];
} tempo[cP].push(arr[a]);
}
let final= [];
for(let a in tempo) {
let node;
if(prop.length>1) {
node= regroupe(tempo[a], prop.slice(1))
} else {
node= tempo[a];
}
final.push({
text: a,
nodes: node
});
} return final;
};
bonsoir Angelisium merci pour la réponse je vais essayer de la convertir en php et voire ce que ça donne ,mais avant j'ai cibler mon pb aprèsplusieurs essais donc j'ai pu changer le message , si tu peux relire le premier message attentivement et voir si tu peux m'aider car je me sens incapable de transmettre mon vrais pb et merci d'avance , a+
adapter treeview bootstrap a ma base de donnee
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
!
!
!
!
Pas d'aide concernant le code par MP, le forum est là pour ça :)
!
!