function genmenu ($page_cour)
Cette fonction est dans un fichier PHP séparé qui sera mentionné dans
tous les scripts PHP qui en ont besoin.
require ("genmenu.php");
Dans les scripts PHP chargés de générer une page du site, la demande
d'insertion du menu se fait par cette instruction :
genmenu (basename ($_SERVER ['SCRIPT_NAME']));
La fonction genmenu reçoit un paramètre qui est le nom de la
page qu'on est en train de visualiser. Dans le cas des statistiques de
vaccination, chaque page du site fait appel à un script PHP spécifique.
Il suffira donc de passer en paramètre le nom de ce script qui est
directement connu du serveur web.
// chemin d'accès au fichier contenant le menu
$ficmenu = DIR_MENUS."/menu-vaccin";
// ouvrir le fichier contenant le menu
$descmenu = fopen ($ficmenu, "r");
// si l'ouverture s'est bien passée
if ($descmenu)
{
// lire la première ligne du menu
$ligne = fgets ($descmenu, LG_MAX_HTML);
// tant qu'on a pu lire une ligne
while ($ligne)
{
// supprimer le retour à la ligne
$ligne = trim ($ligne);
// pour l'indentation
echo " ";
// si la ligne n'est pas vide
if ($ligne)
{
(...)
}
// passage à la ligne
echo "<br>\n";
// lire la ligne suivante du menu
$ligne = fgets ($descmenu, LG_MAX_HTML);
}
// terminé avec le fichier contenant le menu
fclose ($descmenu);
}
// sinon
else
// message d'erreur
echo "Fichier ".basename ($ficmenu)." manquant";
On peut remarquer que pour les lignes vides du fichier menu, on va
générer une ligne de code HTML qui entraînera un passage à la ligne
dans le menu :
// pour l'indentation
echo " ";
// si la ligne n'est pas vide
if ($ligne)
{
(...)
}
// passage à la ligne
echo "<br>\n";
Dans le cas où la ligne du fichier menu n'est pas vide, on va générer du
texte supplémentaire entre les 2 appels de l'instruction echo
// rechercher le premier espace dans la ligne
$posblanc = strpos ($ligne, " ");
// séparer le nom du script php du nom du lien à afficher
// ou l'indicateur en début de ligne du texte à afficher
$debut = substr ($ligne, 0, $posblanc);
$suite = trim (substr ($ligne, $posblanc));
puis on génère un contenu différent en fonction de $debut| Premier champ | Traitement |
| ## | Titre de premier niveau : on affiche la suite de la ligne en caractères gras et agrandis |
| # | Titre de deuxième niveau : on affiche la suite de la ligne en caractères gras |
| Page courante | C'est un cas particulier du cas suivant : le premier
champ de la ligne contient le nom d'un script PHP qui se
trouve être celui reçu dans la variable $page_cour Il n'est pas nécessaire de générer un lien hypertexte sur la page déjà affichée. Par contre, marque qu'on est déjà sur cette page en affichant la suite de la ligne dans une autre couleur est utile. |
| Cas général | On génère un lien hypertexte dans lequel le premier champ de la ligne représente le lien et la suite de la ligne, le texte à afficher. |
// traitement différencié en fonction du premier paramètre
switch ($debut)
{
case "##" : // ligne à afficher en caractères gras agrandis
echo '<font style="font-size:120%"><b>'.$suite."</b></font>";
break;
case "#" : // ligne à afficher en caractères gras
echo "<b>".$suite."</b>";
break;
case $page_cour : // page courante affichée en orange
echo '<font color="#ff8000">'.$suite."</font>";
break;
default : // lien php
echo '<a href="'.$debut.'">'.$suite."</a>";
}
// si un nom de page a été passé en paramètre
if (isset ($_GET ['page']))
// le récupérer
$page = strtolower ($_GET ['page']);
// sinon
else
// page d'accueil par défaut
$page = "accueil";
// fabriquer nom et le le chemin d'accès à la page à afficher
$ficpage = DIR_PAGEDOC."/".$page.".html";
// si la page cherchée n'existe pas
if (! file_exists ($ficpage))
// choisir la page d'erreur en remplacement
$ficpage = DIR_PAGEDOC."/manque_page.html";
Plus tard, la variable $page sera passée en paramètre lors de
l'appel de la fonction qui va générer le menu :
genmenudoc ($page);
La fonction genmenudoc ($page) est définie dans un script
PHP spécifique de nom genmenudoc.php
default : // si lien vers un script php
if (strpos ($debut, ".php"))
// l'afficher tel quel
echo '<a href="'.$debut.'">'.$suite."</a>";
// sinon
else
// afficher la page de documentation demandée
echo '<a href="voir.php?page='.$debut.'">'.$suite."</a>";
En dehors de l'accès au fichier menu-doc à la place du
fichier menu-vaccin, c'est la seule différence qu'il y a
entre le contenu des deux fonctions genmenudoc (...)
et genmenu (...)
// récupérer le nom du script qui permet d'afficher
// la page et rajouter le paramètre de la méthode get
$script = basename ($_SERVER ['SCRIPT_NAME'])."?fich=";
D'autre part, les fichiers à visualiser sont identifiés par leur nom dans
les fichiers menu-csvloc et menu-refcsv.
// rechercher le premier espace dans la ligne
$posblanc = strpos ($ligne, " ");
// s'il existe
if ($posblanc)
{
// ce n'est pas une ligne de lien vers un fichier csv
// séparer le premier paramètre de la ligne de la suite
$debut = substr ($ligne, 0, $posblanc);
$suite = trim (substr ($ligne, $posblanc));
// traitement différencié en fonction du premier paramètre
switch ($debut)
{
case "##" : // ligne à afficher en plus gros caractères et en gras
echo '<font style="font-size:120%"><b>'.$suite."</b></font>";
break;
case "#" : // ligne à afficher en caractères gras
echo "<b>".$suite."</b>";
break;
default : // lien php
echo '<a href="'.$debut.'">'.$suite."</a>";
}
}
// sinon la ligne concerne un fichier csv (local ou de référence)
else
{
// si ce n'est pas celui de la page courante
if ($ligne != $page_cour)
// générer une ligne avec l'appel du lien
echo '<a href="'.$script.$ligne.'">'.$ligne."</a>";
// sinon
else
// générer le nom du lien dans une autre couleur
echo '<font color="#ff8000">'.$ligne."</font>";
}
function genmenusrc ($fichier, $menu)
{
// sélection du type de menu en fonction de son numéro
switch ($menu)
{
case 1 : $typemenu = "src-php";
break;
case 2 : $typemenu = "src-html";
break;
case 3 : $typemenu = "src-c";
break;
default: $typemenu = "srcdoc";
}
// chemin d'accès au fichier contenant le menu
$ficmenu = DIR_MENUS."/menu-".$typemenu;
Lorsqu'on demande, depuis une page qui décrit la liste des fichiers
à voir un fichier particulier, le numéro du menu à afficher est
passé en paramètre en même temps que le nom du fichier dans le lien
hypertexte.
// nom du fichier à afficher
$nomlien = basename ($ligne);
// si ce n'est pas celui de la page courante
if ($nomlien != basename ($fichier))
{
// on affichera le code source du fichier
$lien = "voirsource.php?page=".$ligne."&menu=".$menu;
// générer une ligne avec l'appel du lien
echo '<a href="'.$lien.'">'.$nomlien."</a>";
}
// sinon
else
// générer le nom du lien dans une autre couleur
echo '<font color="#ff8000">'.$nomlien."</font>";