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>