JeuWeb - Crée ton jeu par navigateur
Haml — Une moteur de template génial - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Haml — Une moteur de template génial (/showthread.php?tid=4007)

Pages : 1 2 3 4


Haml — Une moteur de template génial - Sephi-Chan - 27-05-2009

Bonjour,

Aujourd'hui, je vais vous présenter Haml, un moteur de template génial originalement développé pour le langage Ruby. J'ai découvert qu'un portage pour PHP avait été réalisé.

Haml permet, depuis sa syntaxe très légère et basée sur l'indentation de générer du code HTML impeccable.

Ainsi, le code suivant :
!!! 1.1
%html
%head
%meta{ :http-equiv => 'Content-Type', :content => 'application/xhtml+xml;charset=utf-8' }
- if ($title)
%title= $title
- else
%title= $pagename
%body
#header
%h1 Example page
- if ($slogan)
%span= $slogan
#content
%table.config.list
%tr
%th ID
%th Name
%th Value
- foreach ($config as $c)
%tr[$c]
%td= $c->ID
%td= $c->name
%td= $c->value
#footer
%span.author Random Hacker

Est équivalent à ce template PHP :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml;charset=utf-8" />
<?php if ($title) { ?>
<title><?php echo $title; ?></title>
<?php } else { ?>
<title><?php echo $pagename; ?></title>
<?php } ?>
</head>
<body>
<div id="header">
<h1><?php echo $pagename; ?></h1>
<?php if ($slogan) { ?>
<span><?php echo $slogan; ?></span>
<?php } ?>
</div>
<div id="content">
<table class="config list">
<tr><th>ID</th><th>Name</th><th>Value</th></tr>
<?php foreach ($config as $c) { ?>
<tr class="<?php echo ($class = forClassName($c)); ?>"
id="<?php echo "$class_{$c->ID}"; ?>">
<td><?php echo $c->ID; ?></td>
<td><?php echo $c->name; ?></td>
<td><?php echo $c->value; ?></td>
</tr>
<?php } ?>
</table>
</div>
<div id="footer">
<span class="author">Random Hacker</span>
</div>
</body>
</html>

Impresionnant, non ?

Pour en savoir plus, je vous propose la documentation de ce portage : Sourceforge - PHPHaml

Et si vous êtes curieux, je vous propose la documentation du Haml original, pour Ruby (et par extension, pour Ruby on Rails et autres frameworks ruby) : Haml & Sass.

Notez que le module Haml original propose encore plus de fonctionnalité, notamment Sass, qui est un petit langage proche de CSS mais bien plus puissant (il prend en charge les variables, les expressions, etc.) dont les pages sont compilés pour former des documents CSS.


Sephi-Chan


RE: [Haml] Une moteur de template génial - OncleJames - 27-05-2009




RE: [Haml] Une moteur de template génial - pascal - 27-05-2009

La syntaxe *aml est sympa (principe : l'indentation exprime la logique d'imbrication), car moins verbeuse que le html.

Par contre le coté template est toujours le même, et le débat sur "ne pas apprendre un nouveau langage" ou "mes intégrateurs ne comprennent rien à la programmation" donc "on utilise un système de templates" est une blague.

Il ne faut pas apprendre un langage, mais une syntaxe :
- comment afficher une variable (ou un attribut d'un objet)
- comment utiliser des structures (if, for, les tests et boucles diverses et variées)

Que ce soit en PHP, smarty, haml, l'intégrateur devra apprendre un minimum de syntaxe pour faire son boulot.

C'est pour ça que j'utilise PHP comme moteur de template.

A+

Pascal


RE: [Haml] Une moteur de template génial - Allwise - 27-05-2009

Citation :Du Php dans du Html, n'est ce pas contradictoire avec la définition d'un moteur qui de base permet de séparer les différentes couches.
Non, ce qui serait contradictoire si on veut respecter la distinction entre les couches, ce serait de récupérer ou de traiter les données dans le fichier template.

Mais y a pas de différence entre

Code PHP :
<?php if ($title): ?>
<titre><?php echo $title; ?></titre
<?php endif; ?>

Et
Code PHP :
<?php 
- if ($title)
%
title= $title

pour reprendre l'exemple de Sephi, ou encore un
Code PHP :
<?php 
<!-- IF {TITLE} -->
<
title>{TITLE}</title>
<!-- ENDIF -->
C'est exactement la même chose du point de vue de la séparation des couches. On ne fait qu'afficher une variable, directement avec PHP dans le premier cas, avec un moteur de template dans les 2 autres.

Pour ma part, j'utilise la syntaxe PHP la plupart du temps, et aussi de la dernière quand je mets les mains dans un forum phpBB.


RE: [Haml] Une moteur de template génial - Sephi-Chan - 27-05-2009

(27-05-2009, 04:30 PM)OncleJames a écrit : En reprenant des if / else / for dans du code HTML n'est ce pas revenir en arrière au niveau de la séparation des couches ?
Peux-tu me montrer un template qui liste tes joueurs/utilisateurs, s'il te plaît ? Je me demande comment tu fais sans boucles/conditions et autres.

Quel que soit le moteur de template (PHP, Smarty, Haml, etc.), toi et ton designer avez besoin de structure de contrôles et même de fonctions (inhérentes à l'affichage) :
  • Pour échapper le contenu inséré par les utilisateurs (un commentaire, par exemple) afin de limiter les attaques XSS ;
  • Formater un contenu comme une date ;
  • Trouver la traduction d'une chaîne dans un site internationnalisé ;
  • Parcourir un tableau (une liste de joueurs, par exemple) ;
  • Conditionner l'affichage d'un élément (un modérateur pourra voir le niveau d'avertissement d'un utilisateur à côté des messages qu'il poste alors qu'un membre ne le peut pas) ;
  • Etc.

Alors ? Toujours persuadé que ton designer ne doit pas apprendre un minimum de syntaxe ? Smile


(27-05-2009, 04:40 PM)pascal a écrit : Que ce soit en PHP, smarty, haml, l'intégrateur devra apprendre un minimum de syntaxe pour faire son boulot.

C'est pour ça que j'utilise PHP comme moteur de template.
Je n'ai pas compris le lien. Pourquoi choisir PHP justement, quand d'autres systèmes apportent plus de clarté et une syntaxe plus légère ?


Sephi-Chan


RE: [Haml] Une moteur de template génial - OncleJames - 27-05-2009

Ok .. Sephi je l'essaye quand j'ai le temps (mais sans RoR :p )

C'est un autre long débat, mais je vais tout de même répondre a Pascal.
Citation :Par contre le coté template est toujours le même, et le débat sur "ne pas apprendre un nouveau langage" ou "mes intégrateurs ne comprennent rien à la programmation" donc "on utilise un système de templates" est une blague.

Malheureusement, que ce soit dans un contexte pro ou pas, les game designer ne touche pas et ne toucheront pas à la programmation.

Ce ne sont pas les graphistes pour lesquels on invente des micro langages (ELUA, .. ) mais les personnes souhaitant ajouter du contenu au jeu (game designer).
Leur interface doit être simple et clair, ils ne doivent pas chercher une option, elle doit être intuitive, et encore moins devoir programmer.
Ce problème est d'autant plus présent dans les projets 'amateur', pour ma part je suis déjà très satisfait d'avoir réussi à initier les game designers à phpmyadmin, mais de la à leur faire apprendre un langage je refuse, c'est aux programmeurs de donner les bon outils et éviter par la même occasion tout bricolage de code.


RE: [Haml] Une moteur de template génial - pascal - 27-05-2009

(27-05-2009, 05:08 PM)Sephi-Chan a écrit : Je n'ai pas compris le lien. Pourquoi choisir PHP justement, quand d'autres systèmes apportent plus de clarté et une syntaxe plus légère ?

Sephi-Chan

Une syntaxe plus claire ? Bullshit ! Essaye de faire des boucles imbriquées avec des tests en PHPBB ... La plupart des systèmes de templates constituent un monde à part entière. Je demande à voir Haml sur une page qui :
- appelle des fonctions / helpers pour gérer les liens
- utilise des appels à d'autres templates (header, footer)

Pour Haml, c'est lisible, mais ça casse la compatibilité avec les éditeurs html, et ça rajoute un système de template.

J'ai CreaJeu en PHP, les templates sont aussi en PHP+html, il n'y a pas plus simple.

Si utiliser une structure if() en PHP pour un template c'est de la programmation que l'intégrateur n'est pas capable de comprendre, on est mal barrés ... car il aura autant de mal à comprendre le IF() dans un autre système de template.

A+

Pascal


RE: [Haml] Une moteur de template génial - Sephi-Chan - 27-05-2009

(27-05-2009, 07:32 PM)pascal a écrit : Une syntaxe plus claire ? Bullshit ! Essaye de faire des boucles imbriquées avec des tests en PHPBB ... La plupart des systèmes de templates constituent un monde à part entière. Je demande à voir Haml sur une page qui :
- appelle des fonctions / helpers pour gérer les liens
- utilise des appels à d'autres templates (header, footer)

Pour Haml, c'est lisible, mais ça casse la compatibilité avec les éditeurs html, et ça rajoute un système de template.

J'ai CreaJeu en PHP, les templates sont aussi en PHP+html, il n'y a pas plus simple.

Si utiliser une structure if() en PHP pour un template c'est de la programmation que l'intégrateur n'est pas capable de comprendre, on est mal barrés ... car il aura autant de mal à comprendre le IF() dans un autre système de template.

Concernant Haml, rien ne change par rapport à Erb (le système d'affichage classique) en ce qui concerne les view helpers : ils restent identiques. Si tu es curieux, je t'invite à survoler ce guide qui explique comment fonctionne tout ça dans Rails : Ruby on Rails - Layouts and Rendering in Rails

Concernant les éditeurs, c'est un faux problème.
Qui confierai l'intégration d'une application à un intégrateur qui a besoin d'un éditeur HTML évolué ? S'il est intégrateur HTML/CSS et qu'il ne sait pas coder à la main, c'est qu'il n'est pas prêt (ou qu'il est bidon ^^).

Il faut quand même avoir un minimum d'exigences sur les compétences des gens qui participent à ce que l'on fait (d'ailleurs, c'est généralement bon de s'entourer de personnes plus compétentes que soi).

Pour finir, je te rejoins sur la merde que sont les templates PHPBB et le minimum de connaissance à avoir pour un intégrateur. Smile


Sephi-Chan


RE: [Haml] Une moteur de template génial - pascal - 27-05-2009

(27-05-2009, 08:51 PM)Sephi-Chan a écrit : Concernant les éditeurs, c'est un faux problème.
Qui confierai l'intégration d'une application à un intégrateur qui a besoin d'un éditeur HTML évolué ? S'il est intégrateur HTML/CSS et qu'il ne sait pas coder à la main, c'est qu'il n'est pas prêt (ou qu'il est bidon ^^).

Il faut quand même avoir un minimum d'exigences sur les compétences des gens qui participent à ce que l'on fait (d'ailleurs, c'est généralement bon de s'entourer de personnes plus compétentes que soi).

Un éditeur permet de colorer le code et d'éviter les erreurs basiques, ce n'est pas qu'une question de compétence. Je me débrouille pas mal en PHP, pourtant j'utilise Eclipse pour colorer le code, et ça me signale des erreurs bêtes.

Comment les templates haml sont-ils validés ? Si on écrit une structure fantaisiste car mal indentée, que se passe-t-il ?

A+

Pascal


RE: [Haml] Une moteur de template génial - Zamentur - 28-05-2009

Je suis du même avis que Pascal, php est largement suffisant!

Et Haml semble uniquement attirant à cause du fait de sa réécriture du code html...
HTML est peut être verbeux mais de toute façon un intégrateur doit savoir en faire non?

Un autre intérêt pourrait être de pouvoir porter un site sur un autre langage, mais dans ce cas (très rare) je me tournerais vers une solution xml+xslt avec une librairie de manipulation xml digne de ce nom.