File "table0043.php"
Full Path: /home/analogde/www/Dev tableau/table0043.php
File size: 7.69 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 Sticky avec Défilement Horizontal</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet">
<style>
/* Conteneur pour la table avec défilement horizontal */
.table-container {
display: flex;
overflow-x: auto;
margin-bottom: 10px;
}
/* Conteneur de la première colonne sticky */
.sticky-columns {
position: sticky;
left: 0;
background-color: white;
z-index: 2;
width: 150px;
border-right: 1px solid #000;
}
/* Conteneur des autres colonnes (dates, semaine, mois) */
.scrollable-columns {
overflow-x: auto;
white-space: nowrap;
display: block;
}
table {
table-layout: fixed; /* Fixe la largeur des colonnes */
width: 100%;
}
th, td {
padding: 5px;
text-align: center;
border: 1px solid black;
}
.week-even {
background-color: #e0f7fa;
}
.week-odd {
background-color: #ffecb3;
}
.active-cell {
background-color: green;
color: white;
}
.inactive-cell {
background-color: #d3d3d3;
color: black;
}
.button-container {
text-align: center;
margin-top: 10px;
}
</style>
</head>
<body>
<div class="table-container">
<!-- Première colonne fixe (Nom, Total, Mois, Semaine) -->
<div class="sticky-columns">
<table id="data-table-left">
<thead>
<tr>
<th>Nom</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Exemple Nom</td>
<td>0</td>
</tr>
</tbody>
</table>
</div>
<!-- Colonnes défilantes -->
<div class="scrollable-columns">
<table id="data-table-right">
<thead>
<tr>
<!-- Génération dynamique des dates -->
<?php
$start_date = new DateTime("2025-01-01");
$end_date = new DateTime("2025-12-31");
$holidays = [
"01/01", "01/05", "08/05", "14/07", "15/08", "01/11", "11/11", "25/12",
date("d/m", strtotime("2025-05-29")),
date("d/m", strtotime("2025-06-08"))
];
$dates = [];
while ($start_date <= $end_date) {
$dayOfWeek = $start_date->format("N");
$formattedDate = $start_date->format("d");
if ($dayOfWeek < 6 && !in_array($formattedDate, $holidays)) {
$weekNumber = $start_date->format("W");
$month = $start_date->format("m");
$dates[] = ["date" => $formattedDate, "week" => $weekNumber, "month" => $month];
}
$start_date->modify("+1 day");
}
$currentWeek = null;
$weekClass = "week-even";
$months = [
"01" => "Janvier", "02" => "Février", "03" => "Mars", "04" => "Avril",
"05" => "Mai", "06" => "Juin", "07" => "Juillet", "08" => "Août",
"09" => "Septembre", "10" => "Octobre", "11" => "Novembre", "12" => "Décembre"
];
foreach ($dates as $data) {
if ($currentWeek !== $data['week']) {
$currentWeek = $data['week'];
$weekClass = ($weekClass === "week-even") ? "week-odd" : "week-even";
}
echo "<th class='$weekClass'>{$data['date']}</th>";
}
?>
</tr>
</thead>
<tbody>
<tr>
<td>Mois</td>
<?php
$currentMonth = null;
$count = 1;
foreach ($dates as $index => $data) {
if ($currentMonth !== $data['month']) {
if ($currentMonth !== null) {
echo "<td colspan='$count'>{$months[$currentMonth]}</td>";
}
$currentMonth = $data['month'];
$count = 1;
} else {
$count++;
}
if ($index == count($dates) - 1) {
echo "<td colspan='$count'>{$months[$currentMonth]}</td>";
}
}
?>
</tr>
<tr>
<td>Semaine</td>
<?php
$currentWeek = null;
$weekCount = 1;
foreach ($dates as $index => $data) {
if ($currentWeek !== $data['week']) {
if ($currentWeek !== null) {
echo "<td colspan='$weekCount'>{$currentWeek}</td>";
}
$currentWeek = $data['week'];
$weekCount = 1;
} else {
$weekCount++;
}
if ($index == count($dates) - 1) {
echo "<td colspan='$weekCount'>{$currentWeek}</td>";
}
}
?>
</tr>
</tbody>
</table>
</div>
</div>
<div class="button-container">
<button class="btn btn-primary" onclick="addRow()">Ajouter une ligne</button>
</div>
<script>
function addRow() {
let table = document.getElementById("data-table-left").getElementsByTagName('tbody')[0];
let row = table.insertRow(-1);
let cell1 = row.insertCell(0);
cell1.innerText = "Exemple Nom";
let cell2 = row.insertCell(1);
cell2.innerText = "0";
// Ajout des nouvelles lignes dans la partie des colonnes défilantes
let tableRight = document.getElementById("data-table-right").getElementsByTagName('tbody')[0];
let rowRight = tableRight.insertRow(-1);
for (let i = 0; i < tableRight.rows[0].cells.length; i++) {
let cell = rowRight.insertCell(i);
cell.innerText = "0";
cell.classList.add("inactive-cell");
cell.onclick = function () {
toggleCell(cell, rowRight);
};
}
}
function toggleCell(cell, row) {
if (cell.innerText === '0') {
cell.innerText = '1';
cell.classList.add('active-cell');
cell.classList.remove('inactive-cell');
} else {
cell.innerText = '0';
cell.classList.add('inactive-cell');
cell.classList.remove('active-cell');
}
}
</script>
</body>
</html>