Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
SKILL
/
CURL
:
arbre_multi04.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'; $user = 'root'; $password = ''; $database = 'file_management'; $host = "analogdepat.mysql.db"; $user = "analogdepat"; $password = "Un92pac007"; $database = "analogdepat"; $conn = new mysqli($host, $user, $password, $database); if ($conn->connect_error) { die("La connexion a échoué : " . $conn->connect_error); } $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 = []; if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { $filename = $row['filename']; $version = $row['version']; if (!isset($multidimensionalArray[$filename])) { $multidimensionalArray[$filename] = [ 'fichier' => $filename, 'children' => [] ]; } if ($version) { $multidimensionalArray[$filename]['children'][] = [ 'fichier' => $version ]; } } } $jsonData = json_encode(array_values($multidimensionalArray)); $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; } #contextMenu { display: none; position: absolute; background: white; border: 1px solid #ccc; z-index: 1000; box-shadow: 2px 2px 5px rgba(0,0,0,0.2); } #contextMenu ul { list-style: none; padding: 0; margin: 0; } #contextMenu li { padding: 8px 12px; cursor: pointer; } #contextMenu li:hover { background: #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="close">Fermer</li> </ul> </div> <script> const data = <?php echo $jsonData; ?>; let currentFile = ''; let currentVersion = ''; 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; childrenUl.appendChild(childLi); }); li.appendChild(childrenUl); ul.appendChild(li); li.addEventListener('click', function(event) { event.stopPropagation(); if (event.target === li) { childrenUl.style.display = childrenUl.style.display === 'none' || childrenUl.style.display === '' ? 'block' : 'none'; } }); li.addEventListener('contextmenu', function(event) { event.preventDefault(); currentFile = item.fichier; currentVersion = ''; // Réinitialiser la version showContextMenu(event.pageX, event.pageY, item); }); }); return ul; } function showContextMenu(x, y, item) { const menu = document.getElementById('contextMenu'); menu.style.left = `${x}px`; menu.style.top = `${y}px`; menu.style.display = 'block'; menu.setAttribute('data-file', item.fichier); currentFile = item.fichier; } document.addEventListener('click', function() { const menu = document.getElementById('contextMenu'); menu.style.display = 'none'; }); document.addEventListener('contextmenu', function(event) { const menu = document.getElementById('contextMenu'); if (menu.style.display === 'block') { menu.style.display = 'none'; } }); document.addEventListener('keydown', function(event) { if (event.key === 'Escape') { const menu = document.getElementById('contextMenu'); menu.style.display = 'none'; } }); document.getElementById('option1').addEventListener('click', function() { alert(`Option 1 sélectionnée pour ${currentFile}`); }); document.getElementById('option2').addEventListener('click', function() { alert(`Option 2 sélectionnée pour ${currentFile}`); }); document.getElementById('close').addEventListener('click', function() { const menu = document.getElementById('contextMenu'); menu.style.display = 'none'; }); document.getElementById('treeView').appendChild(generateTree(data)); </script> </body> </html>