Mustache, moteur de templates pour PHP

Le 16/04/2013

Dans Développement

Découvrez Mustache, un moteur de template fonctionnant avec de nombreux langages, dont PHP.

Introduction

À force de travailler avec Ruby, on prend quelques habitudes qui rendent le passage sur PHP assez douloureux pour les projets qui le demandent. Le plus dur pour moi est de mettre au même endroit mon markup HTML et le code PHP, car niveau lisibilité, je pense qu’on ne fait pas pire. Solution : les moteurs de templates.

Mustache

Mustache est un moteur le template logic-less disponible en de très nombreux langages, dont le PHP. Ce n’est pas le seul moteur de template disponible avec ce langage, mais le fait qu’il soit logic-less rendant la séparation affichage-donnée obligatoire, m’a fait le choisir. De plus, Mustache étant compatible Javascript, si le site à besoin d’AJAX pour la suite, cela sera plus simple.

Il s’installe très simplement : on décompresse une archive, on inclut un fichier, et on déclare quelques paramètres de notre choix (ou bien on copie colle ceux de la doc, ça marche aussi). Voilà, Mustache est installé et fonctionnel, nous pouvons créer et afficher notre premier template.

echo $m->render('Hello, {{planet}}!', array('planet' => 'World')); // "Hello, world!"

Le premier paramètre est le nom du template ou le template en string et le second est un tableau de données à insérer dans la template.

 

Logic-less ?

Mustache est logic-less. Cela veut dire que vous ne pourrez pas mettre de PHP dans vos templates. Pas d’include, pas de if, pas de while ? Rassurez-vous, il est quand même possible d’utiliser des conditions et des boucles !

Il est possible d’insérer une variable avec {{ma_variable}}. Notez que les symboles sont échappés automatiquement. Pour éviter cela, utilisez {{{ma_variable}}}.

{{> ma_template}} importera une partial (une sorte de bout de template).

{{# ma_variable }} {{/ ma_variable}} est en quelque sorte l’outil à tout faire de Mustache : Si ma_variable n’existe pas, ce qui est entre les balises sera ignoré. Si ma_variable est un tableau, le contenu sera exécuté pour chacun des objets du tableau. 

Le fait que Mustache soit logic-less est donc contraignant sans être un obstacle. En fait, il permet de bien refléchir à la construction de la structure de données envoyée à la vue.

Conclusion

Simple à installer, plus rapide à apprendre que Smarty, et multi langage au possible, Mustache est un bon outil à avoir sous la main. Il vous permettra de garder votre code PHP séparé de votre HTML et vous oblige à une certaine rigueur malheureusement trop souvent absente de ce langage.