setVar('menu', $menu); $this->setVar('header', $header); $this->setVar('title', $title); ?> extend('layouts/default') ?> section('content') ?>
"; // print_r($config_course); // echo ""; // $config_tp['timingpoint'] doit exister $timingPoints = $config_tp['timingpoint'] ?? []; // Hauteur fixe visuelle de chaque TP (en px) $tpHeight = 80; $tpGap = 10; // Largeur de chaque colonne d'intervalle (en px) $intervalColWidth = 60; // Indexer les TP par tp_id pour les alignements verticaux $tpIndexById = []; foreach ($timingPoints as $index => $tp) { $tpIndexById[$tp['tp_id']] = $index; } // Récupérer toutes les lignes d'intervalles (une colonne par intervalle) $intervals = []; foreach ($timingPoints as $tp) { // vérifier si la clé existe if (!isset($tp['config_tp_interval']['clef_temp_minimum_read_entre'])) { continue; } // lire toutes les lignes de cet interval foreach ($tp['config_tp_interval']['clef_temp_minimum_read_entre'] as $row) { $intervals[] = [ 'label' => 'clef_temp_minimum_read_entre', 'start_id' => isset($row['value2']) ? (int) $row['value2'] : 0, // DÉBUT (tp_id) 'end_id' => isset($row['value3']) ? (int) $row['value3'] : 0, // FIN (tp_id) 'minimum' => isset($row['value3']) ? (int) $row['value1'] : 0, // FIN (tp_id) ]; } } $nbTp = count($timingPoints); // Hauteur totale = toutes les cartes + les espaces entre elles $totalHeight = $nbTp * $tpHeight + max(0, $nbTp - 1) * $tpGap; ?>

Config ( timing points)

Config COURSE

$course): ?>
"; // print_r($tp); // echo ""; ?>

tp_id :

mode:
bbk:

- () - ()



    
Minumum sec.
endSection() ?>