Comment gérer une interface graphique en PHP ?

Du simple modèle de page aux feuilles de style XSLT, voici plusieurs solutions pour maîtriser la séparation entre logique applicative et interface graphique grâce au célèbre langage de script côté serveur.

Cet article compare trois méthodes pour gérer en PHP la séparation entre la logique applicative et l'interface graphique. Chacune apporte ses avantages et ses inconvénients. Il appartient au lecteur d'étudier les solutions exposées pour sélectionner celle qui lui est la plus appropriée.

Utiliser directement PHP

On peut tout simplement faire un modèle de page qui sera analysée par PHP après que la couche métier ait été exécutée. Comme ceci :

  <?php foreach($blog->billets as $billet): ?>
 <div class="billet" id="b<?php echo $billet->id; ?>">
  <h1><?php echo $billet->titre; ?></h1>
  <div class="contenu"><?php echo $billet->contenu; ?>
  </div>
 </div>
 <?php endforeach; ?>

Cette méthode est assez propre, la vue est bien séparée de la logique métier de notre application, et les données sont accessibles par des objets simples. Cette solution possède un fort avantage quand à la vitesse de traitement, car le modèle est directement analysé par le moteur de PHP.

Cependant, elle apporte aussi des risques de mauvais usage, comme par exemple dans le cas d'un travail en groupe. Par exemple, l'intégrateur XHTML/CSS pourra employer PHP à tord, sans respecter l'organisation de l'application. Prenons un exemple (un peu extrême) :

 1 <?php
2 include('mysql.inc.php');
3 foreach($blog->billets as $billet): ?>
4 <div class="billet" id="b<?php echo $billet->id; ?>">
5  <h1><?php echo $billet->titre; ?></h1>
6  <div class="auteur"><?php $res = mysql_query('SELECT
    * FROM billets WHERE bid='.$billet->id);
7  while($r = mysql_fecth_array($res)) 
   { echo $r['auteur']; } ?></div>
8  <div class="contenu"><?php echo $billet->contenu; ?>
   </div>
9 </div>
10 <?php endforeach; ?>

Ici, notre intégrateur va tout simplement nier la totalité de l'architecture du programme conçue par les développeurs, et mélanger traitement de données avec leur affichage. Ce manque de restriction peut devenir un problème.

Les moteurs de templates

Les moteurs templates fonctionnent sur le même principe que précédemment, mais cette fois, on utilise un autre langage plus approprié et efficace. Le template sera ainsi analysé par le moteur développé en PHP (souvent sous forme de classe). Notre code ressemblera alors à :

  {Section "billets"}
 <div class="billet" id="b{billets.id}">
  <h1>{billets.titre}</h1>
  <div class="contenu">{billets.contenu}</div>
 </div>
 {/Section}

      
Cette syntaxe est plus simple que la précédente, et évite les débordements. De plus il existe déjà de nombreux moteurs de templates que vous pouvez intégrer à votre application PHP. Cependant, bien que la syntaxe peut être très puissante, l'analyse du template coûtera plus chère en ressources pour le serveur de traitement, mais beaucoup de moteurs de templates intègrent un système de cache pour réduire les temps de calcul.

XSL Transform (XSLT)

Cette dernière solution est peut-être la plus passionnante, mais pas la plus évidente à mettre en place. Il s'agit d'utiliser le langage XSLT.

En attachant à un fichier XML une feuille de style XSLT, on peut le transformer en un autre fichier, par exemple XHTML, mais aussi tout dérivé de XML, ou bien même un fichier PDF. Cette solution à l'atout d'être une technologie pleine d'avenir et standardisée. De plus, les navigateurs récents sont capables d'interpréter XSLT par eux même, XSLT permet donc d'éliminer une charge supplémentaire au serveur. PHP ne générerait donc qu'un document XML et lui associerait la feuille XSLT en fonction du format de sortie désiré.

Cependant, PHP devra prendre le relais pour les utilisateurs possédant des navigateurs plus anciens, il faut donc prévoir un outil de traitement XSLT par PHP (il existe des librairies standards pour PHP 5 très efficaces). Mais le traitement XSLT coûte cher en ressource pour le serveur si le navigateur client ne peut le faire pour lui.

Enfin, la syntaxe XSLT est très puissante et très complète, mais sa prise en main coûte l'apprentissage d'un nouveau langage, et le maîtriser prend un certain temps.

Ce tutoriel a été réalisé par Martius sous licence Creative Commons