Factorisation
Nous constatons que les sections head, header et footer sont similaires dans nos deux pages.
Pour faciliter la maintenance et éviter la duplication de code, nous allons externaliser ces éléments dans des fichiers séparés.
Les parties variables seront remplacées par des variables, que nous définirons dans le fichier appelant avant de les utiliser.
Ces nouveaux fichiers seront placés à la racine de notre site.
Méthode : head.php
Nous allons comparer les balises <head> de la page index et de la page utilisateur/index afin d’en extraire les éléments communs. À partir de ces éléments, nous construirons un fichier <head> partagé, dans lequel les différences seront gérées au moyen de variables PHP.
index.php
<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title>Accueil</title>
<link rel="stylesheet" href="css/style.css">
</head>
utilisateur/index.php
<head>
<base href="../">
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title>Afficher les utilisateurs</title>
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/utilisateur.css">
</head>
<head> commun
Chaque page inclura le head commun, mais définira au préalable ses propres valeurs de variables afin d’y insérer un contenu spécifique.
<head>
<!-- Définition de la base pour les liens relatifs --><base href="= $page_base ">
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<!-- Titre dynamique de la page --><title>= $page_title </title>
<!-- Feuilles de styles spécifiques à la page --><link rel="stylesheet" href="css/style.css">
<link rel='stylesheet' href='css/= $page_styles[0] .css'>
</head>
<?= $page_base ?>: affiche le chemin relatif vers la racine du site.<?= $page_title ?>: affiche le titre de la page.<?= $page_styles[0] ?>: affiche le premier style du tableau$page_styles.
Nous devrons, par exemple, ajouter dans la page utilsateur/index.php :
$page_base = '../';
$page_title = 'Afficher les utilisateurs';
$page_styles = ['utilisateur'];
Dans la page index.php :
$page_base = './';
$page_title = 'Accueil';
$page_styles = [''];
Méthode : header.php
Nous réalisons un fichier header.php que nous ajoutons à la racine de notre site.
Nous copions la balise <header> depuis l’un de nos fichiers et la collons dans ce nouveau fichier.
<header>
<nav>
<ul>
<li><a href='index.php'>Accueil</a></li>
<li><a href='utilisateur/index.php'>Utilisateurs</a></li>
</ul>
</nav>
</header>
Méthode : footer.php
Nous réalisons un fichier footer.php que nous ajoutons à la racine de notre site.
Nous copions la balise <footer> depuis l’un de nos fichiers et la collons dans ce nouveau fichier.
<footer>
<h2>TP PHP</h2>
</footer>
Inclusion de nos fichier dans nos pages
Pour chaque fichier de notre site, nous devons inclure les fichiers nécessaires et définir les variables attendues avant de les utiliser.
Méthode : index.php
// Chemin de base pour les inclusions$page_base = './';
// Titre dynamique de la page$page_title = 'Accueil';
// Feuilles de styles spécifiques à la page$page_styles = [''];
<html lang='fr'>
require "$page_base/head.php";
<body>
require "$page_base/header.php";
<main>
<h1>Accueil</h1>
</main>
require "$page_base/footer.php";
</body>
</html>
Méthode : utilisateur/index.php
$page_title = "Afficher les utilisateurs";
$page_styles = ['utilisateur'];
$page_base = '../';
<html lang='fr'>
require $page_base . 'head.php';
<body>
require $page_base . 'header.php';
<main>
<h1>Afficher</h1>
<ul class='utilisateur-list'>
<li>
<figure class="card">
<img src='images/photos/lucie-aule.gif' alt='photo Aule' />
<figcaption>Aule Lucie 45 ans</figcaption>
</figure>
</li>
<li>
<figure class="card">
<img src='images/photos/jean-bon.gif' alt='photo Bon' />
<figcaption>Bon Jean 65 ans</figcaption>
</figure>
</li>
<li>
<figure class="card">
<img src='images/photos/annie-ball.gif' alt='photo Ball' />
<figcaption>Ball Annie 24 ans</figcaption>
</figure>
</li>
<li>
<figure class="card">
<img src='images/photos/robin-desbois.gif' alt='photo Desbois' />
<figcaption>Desbois Robin 56 ans</figcaption>
</figure>
</li>
<li>
<figure class="card">
<img src='images/photos/jacques-celer.gif' alt='photo Céler' />
<figcaption>Céler Jacques 17 ans</figcaption>
</figure>
</li>
<li>
<figure class="card">
<img src='images/photos/marie-nade.gif' alt='photo Nade' />
<figcaption>Nade Marie 72 ans</figcaption>
</figure>
</li>
<li>
<figure class="card">
<img src='images/photos/noel-sapin.gif' alt='photo Sapin' />
<figcaption>Sapin Noël 12 ans</figcaption>
</figure>
</li>
<li>
<figure class="card">
<img src='images/photos/charles-heau.gif' alt='photo Heau' />
<figcaption>Heau Charles 65 ans</figcaption>
</figure>
</li>
<li>
<figure class="card">
<img src='images/photos/felicie-tation.gif' alt='photo Tation' />
<figcaption>Tation Félicie 34 ans</figcaption>
</figure>
</li>
<li>
<figure class="card">
<img src='images/photos/megane-reneaux.gif' alt='photo Reneaux' />
<figcaption>Reneaux Mégane 34 ans</figcaption>
</figure>
</li>
<li>
<figure class="card">
<img src='images/photos/pierre-kiroule.gif' alt='photo Kiroule' />
<figcaption>Kiroule Pierre 63 ans</figcaption>
</figure>
</li>
<li>
<figure class="card">
<img src='images/photos/rose-deschamps.gif' alt='photo Deschamps' />
<figcaption>Deschamps Rose 23 ans</figcaption>
</figure>
</li>
</ul>
</main>
require $page_base . 'footer.php';
</body>
</html>