Monthly Archives: March 2013

RainTPL: moteur de template PHP

rainTPL

Pendant plusieurs années j’ai utilisé Smarty comme moteur de templates pour mes sites PHP.
Pour rappel, un moteur de templates permet de dissocier la partie esthétique de votre site de la partie fonctionnelle (ou code métier).

L’intérêt d’une telle architecture est multiple:

  • permettre aux développeurs de travailler indépendamment du rendu esthétique
  • permettre aux graphistes de travailler indépendamment du code métier

Cela permet ainsi aux graphistes et aux développeurs de travailler en parallèle sans avoir à interagir avec le travail des autres coeurs de métier.
De plus, cela permet également de modifier le code sans avoir à retoucher au design du site web, ou l’inverse.

Il existe de nombreux moteurs de templates en php mais le plus performant et simple d’utilisation que j’ai testé est Smarty, le moteur de templates réalisé par les développeurs de PHP.

Ce moteur m’a plus tout de suite car il est fortement documenté et un forum d’échange est disponible. En plus, il est fréquemment mis à jour et il est possible de développer ses propres addons et plugins.
Je l’utilise depuis une dizaine d’années et le seul reproche que je pourrais lui faire est qu’il est très verbeux et qu’il met à disposition trop de fonctionnalités, du coup on peut s’y perdre.

Voilà quelques temps, un ami me parle d’un moteur de templates qu’il utilise nommé RainTPL. Ne le connaissant pas je me tente à quelques tests. Et là SURPRISE: ce moteur est tout simplement génial.

Ce sujet lui est donc dédié et vous aidera à l’utiliser.

Présentation de RainTPL, moteur de templates en PHP

RainTPL est un moteur de template Open Source écrit en PHP pour vos sites PHP. Il permet de séparer l’interface du code, et en plus il gère le cache très simplement (ce qui économise les ressources de votre serveur).

Les principaux avantages de RainTPL sont:

  • qu’il est simple à utiliser: uniquement 1 classe dans un seul fichier php, 3 fonctions et 8 mots clé
  • qu’il est rapide à servir les pages et qu’il dispose d’un système de cache performant et simple à utiliser
  • qu’il remplace automatiquement les paths des fichiers javascript, css et image

Installation et configuration de RainTPL

RainTPL est disponible gratuitement en téléchargement sur le site officiel. Je vous recommande d’ailleurs de feuilleter leur site qui est super bien réalisé.
Une fois téléchargé, il vous suffit de copier le fichier “rain.tpl.class.php” dans votre projet. Personnellement je mets toutes mes librairies dans un répertoire nommé “includes”.
Créez ensuite un répertoire “templates”, dans lequel on mettra nos templates html, et un répertoire “cache” qui servira à stocker les fichiers de cache généré par RainTPL.

Pour utiliser RainTPL dans vos fichiers PHP, il vous suffira d’insérer le code suivant:

include "includes/rain.tpl.class.php"; //include Rain TPL
raintpl::$tpl_dir = "templates/"; // template directory
raintpl::$cache_dir = "cache/"; // cache directory

Les mots clé de RainTPL

Contrairement à Smarty, RainTPL ne propose que 8 mots clé (et vous verrez c’est suffisant pour 99% des projets).
Les mots clé sont des chaines de caractères que l’on insère dans les templates html. RainTPL remplacera alors automatiquement leur contenu.
Détaillons les 8 mots clé de RainTPL.

{$Variable_name}

Les variables permettent de définir du contenu dynamique à l’intérieur de vos templates. Il suffit d’utiliser la méthode “assign()” pour affecter une valeur à une variable. L’assignation se fait évidemment coté page php.

Coté html, on utilisera la syntaxe suivante:

Mon age est {$age}  // 30

On peut également assigner une valeur à une variable dans le html via la commande:

{$annee=30}

On pourra alors effectuer des opérations basiques (+, -, *, /, %) sur les variables.

Mon age est {$age+$annee}  // 60

Vous pourrez aussi utiliser des fonctions avec les variables:

Mon nom est {$nom|substr:0,3}  // jhd

Le mot clé {$GLOBALS} permet d’accéder aux variables globales (_SESSION, _GET, _POST, _SERVER).

{#constant#}

La syntaxe {#constant#} permet de définir une constante.

{if=”condition”}{/if}

C’est l’équivalent de la condition “IF” (“SI”) en php. Voici comment on l’utilise:

{if condition="$age < 20"}
moins de 20 ans
{elseif condition="$age < 30"}
moins de 30 ans
{else}
au moins 30 ans
{/if}

{loop=”array”}{/loop}

Ce mot clé permet de boucler sur un tableau:

{loop="user"}
{$value.user_id} - {$value.name} - {$value.phone}
{/loop}

Entre {loop} et {/loop}, on peut utiliser les variables suivantes:

  • {$key}: la clé dans le tableau d’objets.
  • {$value}: la valeur dans le tableau d’objets.
  • {$counter}: le compteur qui démarre à 0.

{include=”template”}

Ce mot clé vous permet d’importer un template dans le template courant. Personnellement je l’utilise pour importer le header et le footer.

{include="header"}

{function=”myFunc”}

Cela vous permet d’appeler une fonction php et d’afficher son résultat.
Par exemple pour afficher la pagination on pourrait utiliser:

{function="pagination($selected_page)"}

{* comment *}

Ce mot clé très pratique vous permet d’ajouter des commentaires dans vos templates.

{noparse}{/noparse}

Tout ce qui se trouve entre ces balises ne sera pas interprété par le moteur de templates RainTPL.

RainTPL et le WYSIWYG

Pour moi c’est indéniablement la fonctionnalité la plus importante de RainTPL. En effet, vous pouvez mettre les vrais chemins de vos différents fichiers css, javascript ou bien image et RainTPL remplacera automatiquement les chemins pour qu’ils fonctionnent via le moteur de templates.
Ainsi si vous mettez le code suivant dans un template html:

<link href="style.css" type="text/css" rel="stylesheet">
<img src="img/logo.gif">

Il deviendra automatiquement

<link href="templates/style.css" type="text/css" rel="stylesheet">
<img src="templates/img/logo.gif">

Notez que si vous assignez une valeur à la variable raintpl::$base_url, alors RainTPL remplacera le chemin par raintpl::$base_url.

Assignation de valeurs et génération du html

Plutôt que de faire un long discours, je vous propose de lire cet extrait de code qui montre comment assigner des valeurs à des variables et comment obtenir le code html généré par RainTPL.

$tpl = new raintpl(); //include Rain TPL
$tpl->assign("age", "30"); // assign variable
$tpl->assign(array("age" => "30", "name" => "Rain")); // associative array
$tpl->assign("user", $user); // assign an array
$html = $tpl->draw('mapage', $return_string = true);

Voilà j’espère que cette mise en bouche concernant RainTPL (extraite en partie du site officiel) vous aura donné envie de l’essayer. Il n’est pas impossible que je fasse un autre sujet concernant l’utilisation du cache sous RainTPL.