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>