Navigation et composition de pages
Un site PHP est généralement constitué de plusieurs pages assemblées à partir de parties communes.
Naviguer entre les pages
Section intitulée « Naviguer entre les pages »Chaque page d’un site PHP est un fichier distinct (index.php, produits.php, contact.php). Aller d’une page à l’autre, c’est faire une nouvelle requête : un lien HTML ordinaire suffit.
<nav> <a href="index.php">Accueil</a> <a href="produits.php">Produits</a> <a href="contact.php">Contact</a></nav>Cliquer un lien envoie une requête au serveur, qui exécute le fichier ciblé et renvoie le HTML produit. Rien de magique : c’est le cycle d’une requête, répété.
On peut aussi transporter une donnée dans le lien, via la chaîne de requête :
<a href="produit.php?id=2">Voir le détail</a>La page produit.php lira alors $_GET["id"]. Les superglobales et la validation de ces données sont approfondies plus loin dans le cours ; retenez pour l’instant que la navigation peut porter des paramètres.
Composer une page à partir de parties
Section intitulée « Composer une page à partir de parties »Plutôt que de réécrire l’en-tête et le pied de page dans chaque fichier, on les inclut. Une page devient alors : inclusion de l’en-tête, contenu propre, inclusion du pied de page.
<?php include __DIR__ . "/includes/header.php"; ?>
<main> <h2>Nos produits</h2> <!-- contenu propre à la page --></main>
<?php include __DIR__ . "/includes/footer.php"; ?>Passer des informations à une partie incluse
Section intitulée « Passer des informations à une partie incluse »Un fichier inclus partage les variables de la page qui l’inclut. On peut donc préparer des valeurs avant l’inclusion et les utiliser dedans. C’est ce qui permet, par exemple, de marquer le lien de la page courante dans une barre de navigation partagée.
-
Chaque page définit son identité avant d’inclure l’en-tête :
<?php$titre = "Nos produits";$pageActive = "produits";include __DIR__ . "/includes/header.php";?> -
L’en-tête lit ces variables pour adapter le titre et le lien actif :
<title><?php echo htmlspecialchars($titre ?? "L'Érablière dorée"); ?></title><nav><a href="index.php" class="<?php echo ($pageActive ?? '') === 'accueil' ? 'actif' : ''; ?>">Accueil</a><a href="produits.php" class="<?php echo ($pageActive ?? '') === 'produits' ? 'actif' : ''; ?>">Produits</a><a href="contact.php" class="<?php echo ($pageActive ?? '') === 'contact' ? 'actif' : ''; ?>">Contact</a></nav>
Réutiliser un morceau plus fin
Section intitulée « Réutiliser un morceau plus fin »La composition ne s’arrête pas à l’en-tête et au pied de page. Un bloc qui revient, comme la carte d’un produit, peut devenir un fragment inclus dans une boucle.
<?php foreach ($products as $p): ?> <?php include __DIR__ . "/partials/product-card.php"; ?><?php endforeach; ?>Le fragment partials/product-card.php utilise la variable $p de la boucle, puisqu’il en partage la portée.
Les mécanismes d’import
Section intitulée « Les mécanismes d’import »include_once et require_once
Section intitulée « include_once et require_once »Quand un fichier déclare quelque chose (une fonction, une classe), l’inclure deux fois provoque une erreur fatale : on ne peut pas redéclarer une fonction.
<?phprequire_once __DIR__ . "/lib/functions.php"; // formatPrix() déclarée ici, une seule foisUtilisez la variante _once pour tout fichier qui déclare des fonctions ou des classes. Pour un simple fragment de présentation que vous voulez répéter (la carte produit dans une boucle), gardez include sans _once.
Importer des données
Section intitulée « Importer des données »Un fichier peut se contenter de retourner une valeur. On l’importe alors comme une expression.
<?phpreturn [ ["name" => "Sirop d'érable 540 ml", "price" => 14.50], ["name" => "Beurre d'érable 250 g", "price" => 9.95],];<?php$products = require __DIR__ . "/data/products.php";C’est la séparation des données et de la présentation : les produits vivent à un endroit, la page qui les affiche à un autre.
Réflexes et pièges
Section intitulée « Réflexes et pièges »- Chemin d’URL vs chemin de fichier :
hrefpour le navigateur,include/requirepour le serveur. Ne les mélangez pas. _oncepour les déclarations : un fichier qui définit des fonctions ou des classes se charge avecrequire_once.- Portée partagée : un fichier inclus voit les variables de l’appelant. Préparez les valeurs avant l’inclusion, et nommez clairement.
- Échappement :
htmlspecialchars(...)sur tout ce qui s’affiche, y compris dans les fragments réutilisés.
Récapitulatif
Section intitulée « Récapitulatif »- Naviguer, c’est lier des fichiers
.phppar des<a href>; chaque clic est une nouvelle requête. - Composer, c’est assembler une page à partir de parties incluses (en-tête, pied de page, fragments), auxquelles on passe des variables via la portée partagée.
- Importer :
include/require(optionnel vs indispensable),_oncepour les déclarations, etrequired’un fichier quireturnpour importer des données.
Quiz. Quelle différence majeure entre include en PHP et import en JavaScript ?
Quiz. Dans un lien <a href='produits.php'>, ce chemin est...