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 :

layout.php<!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 :

layout.php<!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 :

view/page1.php<div>
  content 1
</div>

Le deuxième fichier sera comme ceci :

view/dir/page2.php<div>
  content 2
</div>

Le troisième fichier sera comme ceci :

view/dir/sub/page3.php<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 :

.htaccessRewriteEngine 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 :

index.php<?php
  $url = $_SERVER['REQUEST_URI'];
?>

Ensuite, récupérons le texte du fichier de template :

index.php<?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 :

index.php<?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 :

index.php<?php
  $layout = str_replace('{{ content }}', $content, $layout);
?>

Affichons dans le navigateur le fichier de template avec le contenu inséré :

index.php<?php
  echo $layout;
?>

Rassemblons le tout et obtenons le code suivant :

index.php<?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;
?>
Задание 1

Implémentez le moteur basé sur les fichiers décrit.