Tableaux d'évolution de la vaccination
Tableau d'évolution générale
Le modèle de fichier HTML et le fichier CSS
C'est le cas le plus simple. Le script PHP va afficher une table qui
indique l'évolution de la vaccination pour l'ensemble de la population
française, sans distinction de classe d'âge, ni tout autre critère de
sélection.
C'est donc toujours le même type de table qui sera affiché.
La structure du modèle de fichier HTML utilisé est simple :
<html>
<head>
(...)
<link href="css/misenpage.css" rel="stylesheet" type="text/css">
<link href="css/styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="contenu">
<h1>Evolution générale de la vaccination<br>COVID 19 en France</h1>
<br>
<table align="center" border="1" cellpadding="5">
<tr align="center">
<td>Date</td><td>1ère dose</td><td>Complet</td><td>Rappel</td>
<td>% 1 dose</td><td>% complet</td><td>% rappel</td>
</tr>
XXXTABLE
</table>
<br>
</div>
<div id="menu">
XXXMENU
</div>
</body>
</html>
Comme la quasi totalité des modèles de page HTML de ce site, il fait
appel au fichier
misenpage.css
#menu
{
position: absolute;
top: 0px;
bottom: 0px;
left: 0px;
width: 300px;
padding: 20px;
line-height : 24px;
overflow: auto;
background-color: #D8F0FF;
}
#contenu
{
position: absolute;
top: 0px;
bottom: 0px;
left: 350px;
right: 0px;
padding: 10px;
overflow: auto;
}
La page est découpée en 2 zones :
- le menu, à gauche sur toute la hauteur de la page
- le contenu, sur le reste de la largeur et sur toute la hauteur
Le script PHP
Le script PHP va générer la partie variable du contenu de la page, c'est
à dire :
- la table, à la place de la ligne XXXTABLE
- le menu à la place de la ligne XXXMENU
Pour le menu, c'est toujours pareil. On va donc juste s'intéresser à la
table.
Après avoir copié l'entête de la page HTML et s'être positionné dans
la zone contenu, on vérifie si le fichier
vacsi-a-fra.csv
(évolution de la vaccination par classe d'âge) et les fichiers dérivés
sont à jour. Si nécessaire, on les actualise par un appel de la fonction
testmaj_a_fra ()
On n'a pas besoin du fichier
vacsi-a-fra.csv (il servira pour
générer des graphiques), mais on va utiliser une partie des données qu'il
contient et qui est mémorisé dans le fichier
vacsi-age-ta.csv
(synthèse de l'évolution de la vaccination tous âges confondus à raison
d'une information tous les 10 jours, normalement, le 1
er,
11
ème et 21
ème jour de chaque mois, plus
l'information du dernier jour disponible.
// recopier le début de l'entête html en remplaçant noindex par index
copmaj ($descfic, "noindex,", "index,");
// recopier le début du fichier html jusqu'à la zone contenu
copie_jusque_chaine ($descfic, "contenu", 1);
// vérifier si le fichier csv à utiliser est à jour
// l'actualiser si nécessaire
testmaj_a_fra ();
// construire le nom du fichier csv
$ficcsv = DIR_CSV."/vacsi-age-ta.csv";
// l'ouvrir en lecture
$descscv = fopen ($ficcsv, "r");
Le contenu de ce fichier est presque ce qu'il faut pour générer la table.
Il suffit de franciser les nombres décimaux, de rajouter des symboles %
et de mettre les données au format HTML.
// lire une ligne du fichier csv
$ligne = trim (fgets ($descscv, LG_MAX_CSV));
// tantque non fin de fichier
while ($ligne)
{
// séparer les nombres de vaccination des taux
$pos_point = strpos ($ligne, ".");
$deblig = substr ($ligne, 0, $pos_point);
$finlig = substr ($ligne, $pos_point);
// franciser les . décimaux
$finlig = str_replace (".", ",", $finlig);
// rajouter les pourcentages
$finlig = str_replace (";", " %;", $finlig)." %";
// mettre la ligne lue au format html
$ligne = str_replace (";", "</td><td>", $deblig.$finlig);
// mettre la ligne au format html
$ligne = str_replace (";", "</td><td>", $ligne);
// générer la ligne dans la table
echo " <tr align=\"center\">\n";
echo " <td>".$ligne."</td>\n";
echo " </tr>\n";
// passer à la ligne suivante du fichier csv
$ligne = trim (fgets ($descscv, LG_MAX_CSV));
}
Ce traitement est identique à celui expliqué dans la page
Tableaux de vaccination à ce jour
Autres tableaux d'évolution de la vaccination
Pour les autres tableaux d'évolution de la vaccination :
- évolution par classe d'âge
- évolution par région
- évolution par département d'outre-mer
Plusieurs tables seraient nécessaires pour représenter la totalité des
éléments de chaque catégorie. Et comme chaque table comporte 3 lignes
de plus chaque mois (sauf en ce moment pour les DOM pour lesquels 11
mois sont mémorisés), out afficher sur la même page web prendrait un
grand nombre de lignes.
On a donc recours à un formulaire pour demander à l'utilisateur quelle
table de la catégorie qu'il a choisi, il veut voir.
De ce fait, il va y avoir 2 cas à traiter par le script PHP
- l'utilisateur n'a pas encore choisi de table
- l'utilisateur a choisi une table qu'il faut afficher, mais
ensuite, il doit pouvoir en sélectionner une autre.
Les modèles de fichier HTML et les fichiers CSS
On va utiliser 2 modèles de fichiers HTML, un pour chaque cas.
En prenant comme exemple l'évolution de la vaccination par région, le
premier modèle de fichier de nom
table-evol-select-reg.html a
la structure suivante :
<html>
<head>
(...)
<link href="css/misenpage.css" rel="stylesheet" type="text/css">
<link href="css/styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="contenu" align="center">
<h1>Evolution vaccination COVID 19 en France</h1>
<font style="font-size:150%">
<br>
<br>
Commencez par sélectionner une région<br>
<br>
<br>
</font>
<form action=table-evol-reg.php method=post onclick=submit()>
<select name="reg" font style="font-size:120%">
<option value = "">Choisir</option>
XXXOPTIONS
</select>
</form>
</div>
<div id="menu">
XXXMENU
</div>
</body>
</html>
Il utilise les mêmes fichiers CSS que les autres pages du site et va
permettre de générer une page avec en partie gauche le menu et en partie
droite une liste déroulante permettant de sélectionner la région.
La liste des régions possibles sera générée par le script PHP à la place
de la ligne
XXXOPTIONS
La partie droite de la page aura l'aspect visuel suivant :
Une fois la région sélectionnée, une autre page est affichée selon le
modèle suivant :
<html>
<head>
(...)
<link href="css/misenpage2.css" rel="stylesheet" type="text/css">
<link href="css/styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="barre_haut" align="center">
<h1>Evolution vaccination COVID 19 en France</h1>
<form action=table-evol-reg.php method=post onclick=submit()>
Région
<select name="reg" font style="font-size:120%">>
XXXOPTIONS
</select>
</form>
</div>
<div id="contenu">
<table align="center" border="1" cellpadding="5">
<tr align="center">
<td>Date</td><td>1ère dose</td><td>Complet</td><td>Rappel</td>
<td>% 1 dose</td><td>% complet</td><td>% rappel</td>
</tr>
XXXTABLE
</table>
<br>
</div>
<div id="menu">
XXXMENU
</div>
</body>
</html>
Cette page comporte 3 zones :
- barre_haut : situé en haut de la page du coté droit. Elle
contient la zone de sélection d'une région (pour pouvoir en
choisir une autre)
- contenu : situé sur la partie droite de la page et sur la
partie restante en hauteur. Elle contient la table de la région
sélectionnée
- menu : situé sur la partie gauche de la page et sur toute la
hauteur
La structure de la page étant différente, on fait appel à un autre
fichier CSS :
misenpage2.css
#menu
{
position: absolute;
top: 0px;
bottom: 0px;
left: 0px;
width: 300px;
padding: 20px;
line-height : 25px;
overflow: auto;
background-color: #D8F0FF;
}
#barre_haut
{
position: absolute;
top: 0px;
height: 140px;
left: 350px;
right: 0px;
text-align: center;
overflow: auto;
}
#contenu
{
position: absolute;
top: 130px;
bottom: 0px;
left: 350px;
right: 0px;
padding: 10px;
overflow: auto;
}
Le script PHP
Nous continuons de prendre comme exemple l'évolution de la vaccination
par région.
Le premier travail du script PHP consiste à vérifier si une région a
déjà été sélectionnée. En fonction de la réponse, il choisira le bon
modèle de fichiers HTML.
// récupérer la région sélectionnée
$reg = $_GET ['reg'];
// modèle de page html (dépend si région déjà sélectionnée ou non)
if ($reg)
$ficpage = DIR_PAGES."/table-evol-reg.html";
else
$ficpage = DIR_PAGES."/table-evol-select-reg.html";
Ensuite, on recopie le début du fichier HTML jusqu'à l'endroit où il
faut rajouter la liste d'options dans le formulaire.
// recopier le début de l'entête html en remplaçant noindex par index
copmaj ($descfic, "noindex,", "index,");
// recopier le début du fichier html jusqu'au formulaire de sélection de région
copie_jusque_option ($descfic);
Dans le cas des régions, on va utiliser 2 tableaux :
- un qui contient la liste des codes de régions utilisés dans les
noms des fichiers csv locaux,
- un qui contient les noms de ces régions.
// liste des codes de régions
$liste_codereg = array ("auv", "bou", "bre", "cen", "cor", "gra", "hau",
"ile", "nor", "nou", "occ", "pay", "pro");
// liste des noms de régions
$liste_nomreg = array ("Auvergne-Rhône-Alpes", "Bourgogne-Franche-Comté", "Bretagne",
"Centre-Val de Loire", "Corse", "Grand Est", "Hauts-de-France",
"Ile-de-France", "Normandie", "Nouvelle-Aquitaine", "Occitanie",
"Pays de la Loire", "Provence-Alpes-Côte d’Azur");
Le principe est strictement le même pour les départements d'outre-mer.
Dans le cas des classes d'âge, seul le premier tableau (codes des classes
d'âge sur 2 chiffres) est présent. Le texte à générer est fabriqué de la
même manière que pour le tableau de vaccination par classe d'âge à ce
jour :
// récupérer une classe d'âge
$agemax = $liste_cl_age [$indice];
(...)
// générer le texte associé
if ($agemin)
{
if ($agemax < 80)
echo "De ".$agemin." à ";
else
echo "À partir de ";
}
else
echo "Jusqu'à ";
// fin de la balise <option>
echo $agemax." ans</option>\n";
// âge minimal pour la classe d'âge suivante
$agemin = $agemax + 1;
avec
$agemin qui vaut 0 la première fois.
On va alors utiliser les deux tableaux pour générer la liste permettant
de sélectionner une région (ou un DOM, ou une classe d'âge).
// génération de la liste des régions
for ($indice = 0; $indice < count ($liste_codereg); $indice++)
{
// récupérer un code de région
$codereg = $liste_codereg [$indice];
// générer l'option
echo " <option ";
// si région précédemment choisie
if ($reg == $codereg)
// la sélectionner
echo "selected ";
// fin de la balise <option>
echo 'value = "'.$codereg.'">'.$liste_nomreg [$indice]."</option>\n";
}
Dans le cas où l'une des régions a été sélectionnée, le mot clé
selected dans la ligne HTML correspondante fera que c'est le
nom de cette région qui apparaîtra par défaut dans le menu déroulant.
Par exemple, si la région sélectionnée est "Bourgogne-Franche-Comté", le
code HTML du menu déroulant sera :
<select name="reg" font style="font-size:120%">>
<option value = "auv">Auvergne-Rhône-Alpes</option>
<option selected value = "bou">Bourgogne-Franche-Comté</option>
<option value = "bre">Bretagne</option>
(...)
<option value = "pro">Provence-Alpes-Côte d’Azur</option>
</select>
Ensuite, si une région a été sélectionnée, il faut afficher la table
d'évolution de la vaccination. Pour cela, on commence par vérifier si
les fichiers csv locaux concernés doivent être mis à jour. Puis on ouvre
en lecture le fichier csv qui contient la table à afficher.
// si une région a été sélectionnée
if ($reg)
{
// recopier le début du fichier html jusqu'à la zone contenu
copie_jusque_chaine ($descfic, "contenu", 1);
// vérifier si les fichier csv à utiliser sont à jour
// les actualiser si nécessaire
testmaj_regdom ();
// construire le nom du fichier csv
$ficcsv = DIR_CSV."/vacsi-reg-".$reg.".csv";
// l'ouvrir en lecture
$descscv = fopen ($ficcsv, "r");
L'affichage de la table se fait strictement de la même manière que pour
le tableau d'évolution générale de la vaccination (voir plus haut pour
les détails).
Ensuite, qu'il y ait eu ou non une table à afficher, on termine la page
HTML en générant le menu qui apparaîtra du coté gauche.