Dans un site PHP vanille, lorsqu'on travaille avec les fichiers entete.inc et pied-page.inc pour réutiliser le code commun, on a besoin d'une technique qui permettra à chacune des pages Web d'inclure un fichier JavaScript avec du code propre à cette page.
Il serait possible d'ajouter ce script à la fin complètement du code HTML (après pied-page.inc) mais ceci donnerait du code HTML non valide qui pourrait donner des résultats imprévisibles.
<?php
require 'include/entete.inc';
?>
<div class="...">
...
</div>
<?php
require 'include/pied-page.inc';
Code HTML généré :
...
</body>
</html>
Le code JavaScript propre à la page Web devrait plutôt être chargé tout juste après les autres scripts, dans la zone d'en-tête (à condition d'utiliser l'attirbut defer).
Une technique intéressante pour y arriver est de créer un fichier JavaScript qui porte le même nom que la page Web et de placer ce fichier dans un dossier précis.
Par exemple, si la page d'accueil (index.php) a besoin d'instuctions JavaScript qui lui sont propres, on placera ces instructions dans le fichier js/scriptspages/index.js.
Certaines pages n'auront pas besoin d'instructions JavaScript qui leur sont propres. Pour que le fichier soit ajouté seulement lorsqu'il existe, on pourra utiliser l'extrait de code suivant.
Une bibliothèque de fonctions, par exemple ma-bibliotheque.php, est un bon endroit pour placer ce code.
/**
* Ajoute une balise <script> pour un fichier .js qui porte le même nom que la page actuelle,
* seulement si ce script existe.
* @author Christiane Lagacé <christiane.lagace@hotmail.com>
* Supposition critique : le fichier doit être placé dans le sous-dossier js/scriptspages pour pouvoir être inclus.
* Ex : le script pour la page d'accueil sera js/scriptspages/index.js.
*
* @return void
*
*/
function inclureJsPropreALaPageActuelle(){
$dossierRacineSite = dirname(__FILE__, 2);
// Le deuxième paramètre de basename permet de supprimer cette chaîne de la valeur retournée
$pageActuelleSansExtension = basename( $_SERVER['SCRIPT_NAME'], '.php' );
if ( file_exists( $dossierRacineSite . '/js/scriptspages/' . $pageActuelleSansExtension . '.js' ) ) {
echo "<script src='js/scriptspages/$pageActuelleSansExtension.js' defer></script>";
}
}
Et pour utiliser cette fonction, on ajoutera ce code dans le fichier entete.inc.
<?php require_once 'include/ma-bibliotheque.php'; ?>
<head>
...
<script src="js/monscript.js" defer></script>
<?php inclureJsPropreALaPageActuelle(); ?>
</head>
▼Publicité