File "tree_view05.php"
Full Path: /home/analogde/www/DCIM/2024_PHP/tree_view05.php
File size: 3.24 KB
MIME-type: text/x-php
Charset: utf-8
<?php
// Exemple de données d'entrée : un tableau simple
$filesArray = [
"fichier1", // Parent
"fichier2", // Enfant de fichier1
"fichier3", // Enfant de fichier1
"toto1", // Parent
"toto2", // Enfant de toto1
"toto3", // Enfant de toto1
"toto4" // Enfant de toto1
];
// Fonction pour construire l'arborescence à partir du tableau simple
function buildTree($files) {
$result = [];
$parentStack = [];
foreach ($files as $file) {
// Si le fichier commence par "fichier", on le considère comme un parent
if (strpos($file, 'fichier') === 0) {
$node = ["name" => $file, "children" => []];
// Si le parent actuel existe, on ajoute ce fichier comme enfant
if (!empty($parentStack)) {
$parentStack[count($parentStack) - 1]["children"][] = $node;
} else {
$result[] = $node; // Si c'est le premier parent, on l'ajoute directement
}
// On ajoute ce parent à la pile
$parentStack[] = $node;
} else {
// Sinon, on l'ajoute comme enfant au dernier parent de la pile
if (!empty($parentStack)) {
$parentStack[count($parentStack) - 1]["children"][] = ["name" => $file];
}
}
}
return $result;
}
// Générer l'arborescence
$filesData = buildTree($filesArray);
// Convertir en JSON
$jsonData = json_encode($filesData);
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tree Viewer</title>
<style>
ul {
list-style-type: none;
padding-left: 20px;
}
.toggle {
cursor: pointer;
color: blue;
text-decoration: underline;
}
</style>
</head>
<body>
<h1>Arborescence des fichiers</h1>
<ul id="fileTree"></ul>
<script>
// Utiliser le JSON généré par PHP
const filesData = <?php echo $jsonData; ?>;
function createTree(files) {
const ul = document.createElement('ul');
files.forEach(file => {
const li = document.createElement('li');
const span = document.createElement('span');
span.classList.add('toggle');
span.textContent = file.name;
li.appendChild(span);
if (file.children && file.children.length > 0) {
const childUl = createTree(file.children);
li.appendChild(childUl);
}
ul.appendChild(li);
});
return ul;
}
const fileTree = createTree(filesData);
document.getElementById('fileTree').appendChild(fileTree);
document.querySelectorAll('.toggle').forEach(item => {
item.addEventListener('click', event => {
const nextUl = item.nextElementSibling;
if (nextUl) {
nextUl.style.display = nextUl.style.display === 'none' || nextUl.style.display === '' ? 'block' : 'none';
}
});
});
// Initialiser l'affichage des sous-listes
/* document.querySelectorAll('#fileTree ul').forEach(ul => {
ul.style.display = 'none'; // Par défaut, caché
});*/
</script>
</body>
</html>