Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
2024_PHP
:
arbre_multi010.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php // Configuration de la connexion à la base de données $host = 'localhost'; // ou l'adresse de ton serveur $user = 'root'; // ton nom d'utilisateur MySQL $password = ''; // ton mot de passe MySQL $database = 'file_management'; $host = "analogdepat.mysql.db"; $user = "analogdepat"; $password = "Un92pac007"; $database = "analogdepat"; // Connexion à la base de données $conn = new mysqli($host, $user, $password, $database); // Vérification de la connexion if ($conn->connect_error) { die("La connexion a échoué : " . $conn->connect_error); } // Récupération des fichiers et de leurs versions $query = "SELECT f.id, f.filename, v.version FROM fichiers f LEFT JOIN versions v ON f.id = v.file_id"; $result = $conn->query($query); $multidimensionalArray = []; // Organisation des données en tableau multidimensionnel if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { $filename = $row['filename']; $version = $row['version']; // Vérifie si le fichier est déjà dans le tableau if (!isset($multidimensionalArray[$filename])) { $multidimensionalArray[$filename] = [ 'fichier' => $filename, 'children' => [] ]; } // Ajoute la version si elle existe if ($version) { $multidimensionalArray[$filename]['children'][] = [ 'fichier' => $version ]; } } } // Conversion du tableau en JSON $jsonData = json_encode(array_values($multidimensionalArray)); // Ferme la connexion à la base de données $conn->close(); ?> <!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8"> <title>Tree View</title> <style> .children { display: none; margin-left: 20px; } .folder { cursor: pointer; font-weight: bold; padding: 5px; border: 1px solid transparent; } .folder:hover { background-color: #e0e0e0; } #contextMenu { display: none; position: absolute; background-color: white; border: 1px solid #ccc; box-shadow: 2px 2px 5px rgba(0,0,0,0.3); z-index: 1000; min-width: 200px; /* Largeur minimale du menu */ } #contextMenu ul { list-style: none; margin: 0; padding: 0; } #contextMenu li { padding: 8px 12px; cursor: pointer; } #contextMenu li:hover { background-color: #f0f0f0; } </style> </head> <body> <div id="treeView"></div> <div id="contextMenu"> <ul> <li id="option1">Option 1</li> <li id="option2">Option 2</li> <li id="option3">Option 3</li> <li id="option4">Option 4</li> <li id="option5">Option 5</li> </ul> </div> <script> // Données JSON provenant de PHP const data = <?php echo $jsonData; ?>; let isContextMenuOpen = false; // Variable pour suivre l'état du menu // Fonction pour générer l'arbre function generateTree(data) { const ul = document.createElement('ul'); data.forEach(item => { const li = document.createElement('li'); li.className = 'folder'; li.textContent = item.fichier; const childrenUl = document.createElement('ul'); childrenUl.className = 'children'; item.children.forEach(child => { const childLi = document.createElement('li'); childLi.textContent = child.fichier; // Gestionnaire pour le clic droit sur les enfants (versions) childLi.addEventListener('contextmenu', function(event) { event.preventDefault(); // Empêche le menu contextuel par défaut showContextMenu(event, item.fichier, child.fichier); // Passe le nom du fichier parent et de la version }); childrenUl.appendChild(childLi); }); li.appendChild(childrenUl); ul.appendChild(li); // Gestionnaire d'événements pour le clic sur le nom du fichier li.addEventListener('click', function(event) { event.stopPropagation(); if (event.target === li) { childrenUl.style.display = childrenUl.style.display === 'none' || childrenUl.style.display === '' ? 'block' : 'none'; } }); // Gestionnaire pour le clic droit sur le fichier (ne doit pas ouvrir le menu) li.addEventListener('contextmenu', function(event) { event.preventDefault(); // Empêche le menu contextuel par défaut if (isContextMenuOpen) { hideContextMenu(); // Ferme le menu si déjà ouvert } else { hideContextMenu(); // Assure que le menu est caché } }); }); return ul; } // Fonction pour afficher le menu contextuel function showContextMenu(event, filename, version) { const contextMenu = document.getElementById('contextMenu'); contextMenu.style.display = 'block'; contextMenu.style.left = event.pageX + 'px'; contextMenu.style.top = event.pageY + 'px'; isContextMenuOpen = true; // Indique que le menu est ouvert // Met à jour chaque option du menu avec le nom du fichier et la version document.querySelectorAll('#contextMenu li').forEach((item, index) => { if (version) { item.textContent = `Option ${index + 1} pour ${filename} (Version: ${version})`; } else { item.textContent = `Option ${index + 1} pour ${filename}`; } item.onclick = function() { alert(`Vous avez choisi ${item.textContent}`); hideContextMenu(); // Cache le menu après l'action }; }); // Cache le menu si l'utilisateur clique à l'extérieur document.addEventListener('click', hideContextMenu); } // Fonction pour cacher le menu contextuel function hideContextMenu() { const contextMenu = document.getElementById('contextMenu'); contextMenu.style.display = 'none'; isContextMenuOpen = false; // Indique que le menu est fermé document.removeEventListener('click', hideContextMenu); } // Gestionnaire pour la touche Échap document.addEventListener('keydown', function(event) { if (event.key === 'Escape') { hideContextMenu(); } }); // Générer l'arbre et l'ajouter à la page document.getElementById('treeView').appendChild(generateTree(data)); </script> </body> </html>