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.

7 Responses to RainTPL: moteur de template PHP

  1. Idleman says:

    Wah le piqueur de post !! 😀

  2. Idleman says:

    Ah ben non, vu la date techniquement c’est moi qui ai piqué le sujet ^^, grosse coincidence en tout cas 🙂

  3. foxmask says:

    existe depuis des lustres une alternative a smarty http://jelix.org/articles/fr/jtpl-standalone vaut tout autant le détour que raintpl 🙂

  4. velk says:

    j’ai un collegue qui vient de me taner pour l utiliser a la place de notre systeme de template “maison” qui parse des trucs style VAR[nom] ARRAY[][] pour choper des var globales , TPL[nom] pour inclurer un sous template

    le seul truc qu on a pas , c est les if et les loops, mais on se débrouille en mettant dans des vars, et puis en PHP on a $tpl->LoopFromSubTemplate(nom_template, array)

    mais je suis pas fermé, alors j’ai dis go pour le tester sur un projet.

    c est pas mal , mais j’ai des global qui se balade dans X fichiers PHP , par exemple pour passer $is_admin , qui est global, je galere pour trouver un moment de le passer sur tout les templates, que ca soit le main ou les sous template, du coup je le passe en param a plein de niveau

    dans notre propre systeme, le systeme allait checher si il trouvait des global avec ce nom, donc pas besoin de se casser la tête.

    de plus on a un systeme de cache basé sur memcache qui semble bien plus rapide que le cache fichier utilisé par raintpl.

    au final je penses plutot intégrer les if et loop dans notre systeme plutot que d utiliser raintpl.

    a la base je suis plutot contre le if et loop dans les template. on a en interne des profil pur html/css , qui sont vite perdu avec des if 🙂 du coup je prefere laisser ca aux codeurs, avec raintpl, c est tout mélangé et tu perds finalement de l intéret d avoir une logique de séparation code/html.

    • jhd says:

      Le cache de RainTpl n’est pas très performant en effet, mais il est alrgement suffisant pour la plupart des sites.

      Personnellement je trouve que la conditionnelle dans le templating est indispensable: gain de place, autonomie des designers, gestion des modes, etc…

      Maintenant un système tel que le tien en Homemade fonctionnera probablement mieux dans TON environnement mais est il facilement adaptable pour le rendre générique à toutes sortes de projets Web ?

Leave a Reply

Your email address will not be published. Required fields are marked *