File "arbre_multi07.php"
Full Path: /home/analogde/www/2024_PHP_13_01_2025/arbre_multi07.php
File size: 6.63 KB
MIME-type: text/x-php
Charset: utf-8
<?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: 400px;
}
#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; ?>;
// 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();
showContextMenu(event, item.fichier, child.fichier);
});
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
li.addEventListener('contextmenu', function(event) {
event.preventDefault();
showContextMenu(event, item.fichier, null);
});
});
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';
// 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})`;
item.textContent = `${version}`;
} else {
item.textContent = `Option ${index + 1} pour ${filename} (Version: ${version}) `;
}
item.onclick = function() {
alert(`Vous avez choisi ${item.textContent}`);
contextMenu.style.display = 'none'; // 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';
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>