Smarty, un moteur de templates pour votre jeu

Le langage PHP, PEAR, les techniques de programmation, l'optimisation de vos jeux.

Modérateurs : Ligevum, Crepuscule, Wargaming, Okracoke, Simerion, Heroes, Bestiaire, Exsulare, terato, pentacle, Nainwak

Répondre
yom
Responsable Technique de l'Association
Messages : 73
Enregistré le : 31 mars 2004, 22:57
Localisation : Paris, Fr
Contact :

Smarty, un moteur de templates pour votre jeu

Message par yom »

Qu'est-ce qu'un moteur de templates ?

Dans le cas de Smarty, il s'agit d'une librairie qui va complètement prendre en charge l'affichage de vos pages web en utilisant des modèles évolués de pages HTML. Par "évolué", j'entends que les templates Smarty peuvent contenir du code HTML simple, mais aussi des instructions plus évoluées telles que des boucles ou des sauts conditionnels, destinés uniquement à l'affichage.


Ca parait un peu compliqué..

C'est en fait très simple. Le principe de Smarty est de rendre indépendant le code de votre jeu, par exemple, de votre code HTML.
Par exemple, voici le synopsis d'un script php "classique" qui va afficher les données contenues dans une table SQL sous forme de tableau HTML :

:arrow: Requête en base et récupération des données dans un array()
:arrow: Affichage du haut de la page HTML
:arrow: Boucle foreach sur l'array()
:arrow: Affichage d'une ligne de tableau HTML
:arrow: Fin du foreach
:arrow: Affichage du bas de la page HTML

Jusqu'ici rien de bien compliqué, mais voici à quoi ressemblerait ce synopsis en utilisant Smarty :

:arrow: Requête en base et récupération des données dans un array()
:arrow: Création d'un objet Smarty
:arrow: Assignation de l'array() à l'objet Smarty
:arrow: Affichage de l'objet

La différence est visible. Non seulement mon code est plus simple, mais il en est également beaucoup plus portable puisque la sortie en HTML n'y apparait plus du tout : tout le HTML est exporté dans le template, il s'agit quasiment d'une couche d'abstraction.


Y'a-t-il vraiment un avantage à utiliser Smarty ?

Il y en a même plusieurs :
:arrow: Cela permet une simplification du code et une épuration des algos, qui favorisent la lisibilité et la portabilité.
:arrow: Les templates Smarty font l'objet d'un standard très bien documenté, ce qui signifie que n'importe qui pourrait écrire un template pour votre jeu sans jamais avoir vu votre code PHP !
:arrow: Dans cette même optique, Smarty peut tirer ses variables directement d'un fichier de configuration, ce qui veut dire qu'un designer peut modifier complètement un site sans l'aide d'un programmeur.
:arrow: Le programmeur garde tout de même la main sur tout, puisque Smarty propose des filtres avant la compilation du fichier HTML, après la compilation, et même durant l'affichage du fichier.
:arrow: Smarty propose une fonction de cache, ce qui lui permet d'une part un affichage plus rapide des parties invariables de votre code HTML, mais aussi des parties variables générées de manière répétitive.
:arrow: La communauté grandissante d'utilisateurs de Smarty a déjà développé de multiples plugins très pratiques. Par exemple, il existe un plugin permettant de chiffrer en javascript toutes les adresses email affichées sur votre site, ceci afin d'éviter les robots de spam. Toutes les automatisations sont envisageables.

Il existe encore bien d'autres avantages mais je ne fais là qu'une présentation succinte de Smarty :wink:


D'accord, j'aimerais essayer Smarty.. par où je commence ?

Par ici : http://smarty.php.net/manual/fr/getting.started.php
Toute la procédure d'installation y est détaillée, de votre premier 'Hello world' aux fonctions de scripting avancées, il n'y a qu'à se laisser guider à travers la doc.


Des exemples ?

Ici : http://y0m.net/manager/
Il s'agit d'une sorte de gestionnaire de fichier pour une radio en ligne, qui permet de naviguer entre les répertoires et de voir les mp3 qui s'y trouvent. Je vous propose une manip simple qui démontre immédiatement les avantages du cache de Smarty :
:arrow: Cliquez sur un répertoire au hasard
:arrow: Si la page n'est pas encore dans le cache de Smarty et que le répertoire ne contient pas de mp3, elle mettra environ 15ms à 20ms pour s'afficher (le temps est indiqué en pied de page). Sinon, c'est qu'elle est déjà en cache : essayez un autre répertoire.
:arrow: Revenez à la racine
:arrow: Retournez dans le répertoire dont le contenu s'était affiché en 15 à 20ms : le temps d'affichage est maintenant passé à 1,5ms.


Conclusion / Liens

J'espère que cette petite démo vous aura convaincu. Personnellement, j'utilise Smarty depuis quelques mois et c'est du bonheur. Je ne perds plus de temps au design de mes pages web, mes templates sont réutilisables très facilement, et surtout je n'ai pas besoin de retoucher tout mon code PHP pour effectuer une modification mineure sur l'affichage de mon site : je fais la modif sur mon template et tout est propagé. Enfin, Smarty était tellement simple à utiliser que j'ai même pu me payer le luxe d'indenter et de mettre en forme mon code HTML afin de le rendre lisible par n'importe qui, chose impensable avec du HTML en dur dans le code PHP ;)

:idea: Site officiel de Smarty (en anglais; doc fr dispo)
:idea: Un témoignage sur l'utilisation de Smarty en équipe (lien en anglais)
Admin technique de nainwak.org
Avatar du membre
Haiken
Président de l'Association
Messages : 666
Enregistré le : 01 avr. 2004, 09:00

Message par Haiken »

Je rajoute qu'il existe de nombreux moteurs de template :

voir un comparatif ici : http://cyberzoide.developpez.com/php4/template/

Et que Smarty est beaucoup critiqué pour sa complexité :roll:

Néanmoins, utiliser un moteur de template me semble nue des priorité pour pouvoir maintenir un jeu efficacement.
yom
Responsable Technique de l'Association
Messages : 73
Enregistré le : 31 mars 2004, 22:57
Localisation : Paris, Fr
Contact :

Message par yom »

Oui c'est vrai, Smarty est complexe, c'est pour cela que j'ai choisi de le présenter lui plutôt qu'un autre, et effectivement une mini-explication s'impose :

Dans le cadre de la programmation d'un jeu en ligne, on aura plutôt affaire à des équipes de développement et même, par exemple dans le cas de nainwak, à une équipe de designers, une autre de codeurs, etc etc.
C'est en cela que Smarty me semble convenir à la réalisation d'un jeu en ligne puisque c'est celui qui - à mon sens - donne le plus de libertés aux développeurs sans gêner les designers, tout en offrant d'un autre côté des commandes très poussées aux designers, qui n'auront aucune incidence sur le code.

Conclusion : Smarty est probablement surdimensionné pour un petit projet réalisable par une seule personne, mais plus le projet est vaste et plus l'intérêt de Smarty se fait sentir, aussi bien par son degré d'abstraction que par sa maléabilité.

Bien évidemment je ne détiens probablement pas la Vérité absolue, et il faudra bien sûr tester avant de se faire une idée ;)
Admin technique de nainwak.org
Avatar du membre
Haiken
Président de l'Association
Messages : 666
Enregistré le : 01 avr. 2004, 09:00

Message par Haiken »

Smarty est aussi le plus décrié vis à vis de l'intégration de graphistes, parce que la complexité de Smarty oblige les designers à apprendre ce qui s'approche beaucoup d'un language de prog. Et donc, pourquoi apprendre un nouveau language plutôt que le php par exemple (PHP est un language de template)
yom
Responsable Technique de l'Association
Messages : 73
Enregistré le : 31 mars 2004, 22:57
Localisation : Paris, Fr
Contact :

Message par yom »

Haiken a écrit :Et donc, pourquoi apprendre un nouveau language plutôt que le php par exemple (PHP est un language de template)
On peut aussi embarquer du php dans un template Smarty ;)
Admin technique de nainwak.org
Daimonos Tereutes
Responsable Technique de l'Association
Messages : 926
Enregistré le : 30 mars 2004, 18:39

Message par Daimonos Tereutes »

Un document sur les template fournis par Arwall, plutôt sympa:
http://www.phpindex.com/download/Templates_V1.2.pdf
Admin technique de nainwak.org
Gniarf
Messages : 43
Enregistré le : 13 août 2005, 04:46

Message par Gniarf »

Livres Blancs / Frameworks PHP

Ce livre blanc présente les bibliothèques et frameworks suivants : Pear, eZ Components, Zend Framework, CakePHP, Symfony, Prado, Seagull, PhpOnTrax, Code Igniter, Copix, Jelix, WACT, Zoop :

http://www.smile.fr/publications/livres ... eworks-php
Répondre