File "table0019.php"
Full Path: /home/analogde/www/Design/Dev tableau/table0019.php
File size: 5.63 KB
MIME-type: text/html
Charset: utf-8
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tableau HTML</title>
<style>
.table-container {
width: 100%;
overflow-x: auto;
}
table {
border-collapse: separate; /* Empêche la fusion des bordures */
border-spacing: 0;
width: 100%;
table-layout: auto; /* Permet aux colonnes de s'ajuster automatiquement */
}
th, td {
padding: 5px;
text-align: center;
border: 1px solid black; /* Bordure par défaut pour toutes les cellules */
box-sizing: border-box; /* Inclut la bordure dans la largeur de la cellule */
}
/* Fixer la largeur de la première colonne et lui donner une bordure visible */
.fixed-column {
position: sticky;
left: 0;
background: white;
z-index: 1;
border-left: 2px solid black; /* Bordure gauche visible */
border-right: 1px solid black; /* Bordure droite visible */
padding-left: 10px;
padding-right: 10px;
width: 222px; /* Largeur fixée à 222px pour la première colonne */
min-width: 222px; /* Empêche la réduction de la largeur */
}
/* Spécifier la bordure de la première colonne de chaque ligne */
td:first-child {
border-left: 2px solid black; /* Maintient la bordure gauche de la première cellule */
}
/* Style pour les cellules avec valeur 1 */
.active-cell {
background-color: green;
color: white;
}
/* Rendre la deuxième colonne (total) non cliquable */
.total-column {
background-color: #f0f0f0;
pointer-events: none; /* Désactive le clic sur cette colonne */
}
</style>
</head>
<body>
<div class="table-container">
<table>
<!-- Ligne d'en-tête -->
<tr>
<th>Nom</th>
<th>Total</th>
<!-- Autres en-têtes des colonnes peuvent être ajoutés ici -->
<?php
$columns = 200;
for ($i = 0; $i < $columns; $i++) {
echo "<th>Colonne " . ($i + 1) . "</th>";
}
?>
</tr>
<?php
$rows = ['toto', 'titi', 'lulu'];
foreach ($rows as $row) {
echo "<tr><td class='fixed-column' onclick='editCell(this)'>$row</td>";
// Ajouter la colonne "total" après la première colonne, et la rendre non cliquable
echo "<td class='total-column'>0</td>"; // Colonne total initialisée à 0
// Ajouter les autres colonnes
for ($i = 0; $i < $columns; $i++) {
echo "<td onclick='toggleCell(this, this.parentElement)'>0</td>";
}
echo "</tr>";
}
?>
</table>
</div>
<script>
// Fonction pour éditer la première colonne
function editCell(cell) {
// Si la cellule est déjà en mode édition, ne rien faire
if (cell.querySelector("input")) return;
// Créer un champ input pour rendre la cellule éditable
var input = document.createElement("input");
input.type = "text";
input.value = cell.innerText; // Mettre la valeur actuelle de la cellule
cell.innerHTML = ''; // Vider la cellule
cell.appendChild(input);
// Donner le focus au champ input
input.focus();
// Enregistrer la valeur lorsque l'utilisateur appuie sur "Entrée"
input.addEventListener('keydown', function(event) {
if (event.key === 'Enter') {
cell.innerText = input.value; // Sauvegarder la valeur
}
});
// Fermer l'édition lorsque l'utilisateur clique en dehors de la cellule
input.addEventListener('blur', function() {
cell.innerText = input.value; // Sauvegarder la valeur
});
}
// Fonction pour gérer le clic dans les cellules des autres colonnes et calculer le total
function toggleCell(cell, row) {
if (cell.innerText === '0') {
cell.innerText = '1';
cell.classList.add('active-cell'); // Appliquer le fond vert et la couleur du texte
} else {
cell.innerText = '0';
cell.classList.remove('active-cell'); // Réinitialiser le fond à blanc
}
// Calculer le total pour la ligne
updateTotal(row);
}
// Fonction pour calculer et mettre à jour la colonne "total"
function updateTotal(row) {
let total = 0;
// On commence à la 3ème cellule (index 2) et on additionne les valeurs des cellules de la ligne
for (let i = 2; i < row.cells.length; i++) {
let cellValue = parseInt(row.cells[i].innerText);
if (!isNaN(cellValue)) {
total += cellValue;
}
}
// Mettre à jour la cellule de la colonne "total" (index 1)
row.cells[1].innerText = total;
}
</script>
</body>
</html>