Séparez le PHP du HTML

Par Jean-François GAZET le 1 septembre 2015

Pour développer un site web on peut inclure du PHP directement dans le HTML. On se retrouve alors à maintenir du code tel que celui-ci :

<!DOCTYPE html>
<html lang="<?php echo $lng; ?>">  
<head>
    <meta charset="utf-8">
    <title><?php echo $title;?></title>
</head>
<body>
<table>
 <tr>
  <td align="right">Test</td>
  <td><input type="text" value="<?php
// bon, c'est un peu n'importe quoi  
  if ($count == 5) echo htmlentities($data['titre']);
  ?>"></td>
 </tr>
</table>
<?php
$i=0; while($i<5) {echo "$i<br>"; $i++;}
// mais c'est pour l'exemple :)
?>
</body>
</html>

Vous conviendrez que la lisibilité n’est pas très optimale. Et faire évoluer cette soupe de code pourra s’avérer problématique et fastidieuse.

Alors que faire ?

Séparez le fond de la forme

Créez des modèles en HTML (on dit aussi des “templates”). Changer l’habillage graphique de vos pages sera alors aussi aisé que de renommer un fichier. Voici un exemple de template (nommez-le template.html) :

<!DOCTYPE html>
<html lang="fr">

<head>
    <meta charset="utf-8">
    <title>##TITLE##</title>
</head>

<body>
    ##CONTENT##
</body>

</html>

Ensuite il faut un moteur. Ci-dessous une classe très basique en PHP (nommez-la class.template.php) :

<?php
//-----------------------------------------------------------------------
//  AUTHOR	: Jean-Francois GAZET
//  WEB 	: https://www.jeffprod.com
//  TWITTER	: @JeffProd
//  MAIL	: jeffgazet@gmail.com
//  LICENCE : GNU GENERAL PUBLIC LICENSE Version 2, June 1991
//-----------------------------------------------------------------------

class Template
	{
	private $_tag;
	private $_txt;
	private $_templateFile;

	public function __construct($templateFile)
		{
		$this->_templateFile=$templateFile;
		$this->_tag=array();
		$this->_txt=array();
		}

	public function assign($tag,$txt)
		{
		$this->_tag[]=$tag;
		$this->_txt[]=$txt;
		}

	public function render()
		{
		ob_start();
		include($this->_templateFile);
		$template=ob_get_contents();
		ob_end_clean();

		$template=str_replace($this->_tag,$this->_txt,$template);

		echo $template;
		}
	}
?>

Il ne vous reste qu’à créer vos pages de la façon suivante :

<?php
require_once 'class.template.php'; // on aura besoin du moteur de rendu
$template = new Template('template.html'); // choix du template
$template->assign('##TITLE##','My page title'); // on définit le titre de la page
$template->assign('##CONTENT##','Hello world !'); // on définit son contenu
$template->render(); // affichage
?>

Si vous voulez changer de look, indiquez simplement un autre fichier template.

Pour aller plus loin

Il existe une multitude de “web template engines”. L’un des plus connus est Smarty. Je vous recommande également un peu de lecture sur le modèle MVC (Modèle Vue Contrôleur).


Partagez cet article


A lire également Tous les articles