Moteur de site basé sur des fichiers en PHP
Implémentons un moteur de site qui nous permettra de créer un fichier de template, auquel, en fonction de l'URL, différents contenus seront connectés.
Supposons que la structure de notre page se présente comme suit :
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
content
</main>
<header>
footer
</header>
</body>
</html>
Insérons à l'endroit où l'insertion du contenu doit
avoir lieu une commande inventée par nous pour l'insertion,
par exemple celle-ci : {{ content }}. Modifions le template de notre site :
<!DOCTYPE html>
<html>
<head>
<title>title</title>
</head>
<body>
<header>
header
</header>
<main>
{{ content }}
</main>
<header>
footer
</header>
</body>
</html>
Créons maintenant un dossier view, dans lequel
nous placerons les fichiers de contenu. Directement dans ce
dossier ou dans des sous-dossiers.
Le premier fichier sera comme ceci :
<div>
content 1
</div>
Le deuxième fichier sera comme ceci :
<div>
content 2
</div>
Le troisième fichier sera comme ceci :
<div>
content 3
</div>
Faisons maintenant en sorte que le fichier correspondant
soit récupéré en fonction de l'URL
de la barre d'adresse. Dans notre cas, pour l'URL /page1
ce sera le premier fichier, pour l'URL /dir/page2
- le deuxième, et pour l'URL /dir/sub/page3
- le troisième.
Passons à l'implémentation. Pour commencer, dans le fichier
.htaccess, faisons en sorte que toutes les adresses demandées,
à l'exception des fichiers de ressources, soient redirigées
vers la page index.php :
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !\.(js|css|ico|jpg|png|gif)$
RewriteRule .+ index.php
Sur la page index.php, récupérons dans une variable
l'URL demandée :
<?php
$url = $_SERVER['REQUEST_URI'];
?>
Ensuite, récupérons le texte du fichier de template :
<?php
$layout = file_get_contents('layout.php');
?>
Maintenant, en fonction de l'URL, récupérons depuis le dossier view
le fichier de contenu correspondant :
<?php
$content = file_get_contents('view' . $url . '.php');
?>
Remplaçons dans le texte du template la commande que nous avons inventée par le contenu obtenu depuis le fichier :
<?php
$layout = str_replace('{{ content }}', $content, $layout);
?>
Affichons dans le navigateur le fichier de template avec le contenu inséré :
<?php
echo $layout;
?>
Rassemblons le tout et obtenons le code suivant :
<?php
$url = $_SERVER['REQUEST_URI'];
$layout = file_get_contents('layout.php');
$content = file_get_contents('view' . $url . '.php');
$layout = str_replace('{{ content }}', $content, $layout);
echo $layout;
?>
Implémentez le moteur basé sur les fichiers décrit.