ucfirst(str_replace('-', ' ', $basename)), // ex: Diagnostic pont Bordeaux 'contenu' => file_get_contents($file), 'date' => date('d/m/Y', filemtime($file)), 'time' => filemtime($file), 'source' => 'Theorems (local)', 'link' => "actualites/$basename.html" // lien vers le fichier HTML ]; } } // === 2️⃣ Chargement des actualités externes (RSS) avec cache === $rss_sources_file = __DIR__ . '/data/rss_sources.json'; $rss_sources = []; // Lecture du fichier JSON contenant les flux if (file_exists($rss_sources_file)) { $rss_sources = json_decode(file_get_contents($rss_sources_file), true); } else { // Si pas de fichier JSON, flux par défaut $rss_sources = [ "Cerema" => "https://www.cerema.fr/fr/rss.xml", "La Gazette des Communes" => "https://www.lagazettedescommunes.com/feed/", "AFGC" => "https://www.afgc.asso.fr/feed/" ]; } $cache_dir = __DIR__ . '/cache'; $cache_file = $cache_dir . '/rss_cache.json'; $cache_duration = 12 * 3600; // 12 heures if (!is_dir($cache_dir)) mkdir($cache_dir, 0777, true); $rss_actus = []; if (file_exists($cache_file) && (time() - filemtime($cache_file) < $cache_duration)) { $rss_actus = json_decode(file_get_contents($cache_file), true); } else { foreach ($rss_sources as $source_name => $rss_url) { $rss = @simplexml_load_file($rss_url); if ($rss) { foreach ($rss->channel->item as $item) { $pubDate = strtotime((string)$item->pubDate); $rss_actus[] = [ 'titre' => (string)$item->title, 'contenu' => (string)$item->description, 'date' => date('d/m/Y', $pubDate), 'time' => $pubDate, 'source' => $source_name, 'link' => (string)$item->link ]; } } } file_put_contents($cache_file, json_encode($rss_actus)); } // Fusion locales + RSS $actus = array_merge($actus, $rss_actus); // Tri du plus récent au plus ancien usort($actus, function($a, $b) { return $b['time'] - $a['time']; }); ?> Actualités — Theorems

Actualités récentes

Découvrez les dernières réalisations, innovations logicielles et études techniques menées par Theorems.

Aucune actualité pour le moment.