Hyla utilisait le moteur de gabarit de la Phplib qui n'est plus maintenu, plus à jour et, à vrai dire, totalement dépassé. C'est pourquoi j'ai pris la décision d'écrire ce nouveau moteur de gabarit compatible avec la syntaxe de la Phplib.
Le choix d'avoir garder la syntaxe des templates de la Phplib est guidé par la simplicité : en effet, la syntaxe est très facile d'approche et permet d'assurer une bonne compatibilité avec les gabarits déjà existants.
Ce nouveau moteur dispose de beaucoup de nouveaux concepts que je vous invite à consulter en seconde partie de la dépêche.
Au niveau des performances, ce moteur est beaucoup, beaucoup plus rapide que son prédécesseur (voir le lien "Performances"), chose qu'il est encore possible d'améliorer en ajoutant un système de cache.
La version actuelle 0.7.0 est considérée comme stable et est déjà utilisée en production. Un forum de discussion à été mis en place pour répondre aux demandes des utilisateurs. Ce moteur de gabarit laisse totalement la main au contrôleur, il n'est pas possible de faire des tests dans la vue (comme certains autres moteurs, l'excellent Jelix ou encore l'usine à gaz Smarty, etc.). L'approche est simplement différente : on déclare des blocs dans la vue qu'on affichera ou non par la suite depuis le contrôleur.
Les blocs
<!-- BEGIN hello -->
Hello world
<!-- END hello -->
Le bloc ci-dessus sera affiché à l'aide de la méthode render, exemple :
$tpl->render('hello');
L'introduction des blocs ELSE vient grandement simplifier le code :
<!-- BEGIN line -->
Contenu du bloc
<!-- ELSE line -->
Affiché uniquement si le bloc au dessus n'est pas affiché
<!-- END line -->
Le contenu de ELSE sera affiché uniquement dans le cas ou la méthode $tpl->render('line'); n'est pas utilisée.
Les variables
Bien sûr, ce moteur gère les variables et cette nouvelle version vient avec son lot de nouveautés à ce sujet :
Concept de variables par défaut
{$variable (Ma valeur par défaut)}
Si le contenu de $variable n'est jamais rempli alors son contenu sera égale à la valeur entre parenthèses.
Modification de variable directement depuis la vue.
{!setvar:toto,'Variable toto créée !'}
{&toto,'Variable toto créée !'}
Appel de fonction pour les variables
{$toto|lower|ucfirst}
Il est bien sûr possible de faire des mix de tout cela :
{$variable (Ma valeur par défaut)|upper|trim|escape}
Autres nouveautés
Méthode de traduction intégrée
{_Hello world !}
Importation d'un fichier depuis la vue
{!include:test.tpl}
{!import:test2.tpl}
Pour tout le reste des nouveautés, je vous invite à consulter la documentation en ligne et les exemples qui sont disponibles.
Aller plus loin
- Le site officiel (41 clics)
- Quelques démonstrations d'utilisations (31 clics)
- La documentation complète (24 clics)
- Les performances (19 clics)
- Téléchargements (11 clics)
- Hyla Project, le gestionnaire de fichiers d'oû Hyla Tpl est parti (15 clics)
# Quoi de neuf en fait ?
Posté par Boa Treize (site web personnel) . Évalué à 2.
http://blog.hyla-project.org/index.php/post/2009/10/23/Un-no(...)
Et donc, quoi de neuf depuis ? :-)
[^] # Re: Quoi de neuf en fait ?
Posté par Kangs . Évalué à 3.
[^] # Re: Quoi de neuf en fait ?
Posté par hugo (site web personnel) . Évalué à 6.
[^] # Re: Quoi de neuf en fait ?
Posté par onglis_se . Évalué à 4.
[^] # Re: Quoi de neuf en fait ?
Posté par hugo (site web personnel) . Évalué à 1.
C'est stable et fiable, suffisamment pour lancer un développement sérieux avec.
# Blocs ELSE
Posté par hugo (site web personnel) . Évalué à 2.
L'introduction des blocs ELSE vient grandement simplifier le code :
<!-- BEGIN line -->
Contenu du bloc
<--! ELSE line -->
Affiché uniquement si le bloc au dessus n'est pas affiché
<!-- END line -->
[^] # Re: Blocs ELSE
Posté par hugo (site web personnel) . Évalué à 1.
[^] # Re: Blocs ELSE
Posté par Davy Defaud . Évalué à 2.
- « Le choix d'avoir garder »
- « Un forum de discussion à été »
- « son contenu sera égale »
[^] # Re: Blocs ELSE
Posté par hugo (site web personnel) . Évalué à 1.
<!-- BEGIN line -->
Hello world
<!-- END line -->
# Un moteur de gabarit ?
Posté par CopainJack (site web personnel, Mastodon) . Évalué à 8.
[^] # Re: Un moteur de gabarit ?
Posté par Moonz . Évalué à 0.
[^] # Re: Un moteur de gabarit ?
Posté par rewind (Mastodon) . Évalué à 2.
Ici, la news explique très bien qu'il existait un moteur qui était utilisé mais plus maintenu et que ce nouveau moteur le remplace et l'étend. Au contraire, j'y vois un parfait exemple de ce que le libre peut apporter : on reprend et on améliore.
[^] # Re: Un moteur de gabarit ?
Posté par Moonz . Évalué à 2.
Celui-ci en particulier, j’en sais rien. Je connais pas assez son historique.
[^] # Re: Un moteur de gabarit ?
Posté par hugo (site web personnel) . Évalué à 2.
Tu sembles pourtant me juger très rapidement dans ton commentaire précédent...
Si justement tu ne connais pas l'historique, le mieux est de t'abstenir.
[^] # Re: Un moteur de gabarit ?
Posté par Moonz . Évalué à 1.
Je répondais à celui qui demandait ce qu’était un système de gabarit, pas qui demandait ce qu’était HylaTpl ou quoi que ce soit d’autre. Et j’ai du mal à voir comment défendre de bonne foi l’idée que l’avalanche de moteurs de templates en PHP existants n’est pas la plus pure expression du syndrome NIH (ce qui ne signifie pas qu’il n’est pas ni n’a jamais été possible d’écrire un moteur de template en PHP sans en être victime).
> le mieux est de t'abstenir.
Ça tombe vachement bien : pour HylaTpl, c’est ce que j’ai fait.
[^] # Re: Un moteur de gabarit ?
Posté par Moogle . Évalué à 6.
J'ai tâté du Smarty et j'étais toujours limité par les fonctions du langage, obligé de trouver des contournements, et au final forcé de faire des choses assez moches. En comparaison, les templates de Symfony, qui sont en PHP pur, sont un bonheur à utiliser.
[^] # Re: Un moteur de gabarit ?
Posté par Nicolas (site web personnel) . Évalué à 3.
Plus pour longtemps ! Quand la version 2 verra le jour, elle viendra avec son moteur de template : Twig (http://www.twig-project.org/ )
Les raisons du revirement de F. Potencier :
http://fabien.potencier.org/article/34/templating-engines-in(...)
[^] # Re: Un moteur de gabarit ?
Posté par case42 (site web personnel) . Évalué à 7.
[^] # Re: Un moteur de gabarit ?
Posté par Mathieu Segaud . Évalué à 4.
[^] # Re: Un moteur de gabarit ?
Posté par Sylvain Sauvage . Évalué à 3.
[^] # Re: Un moteur de gabarit ?
Posté par CrEv (site web personnel) . Évalué à 1.
# Mesure de performances
Posté par Kerro . Évalué à 4.
J'ai regardé rapidement le source, histoire de faire le malin, et j'ai testé, histoire de m'amuser :-)
Une remarque: sur le site web officiel, il y a une comparaison de performance. Il serait peut-être bien de fournir le source. A mon avis pas mal de personne viendrons contribuer à l'amélioration des tests... donc du logiciel.
[^] # Re: Mesure de performances
Posté par hugo (site web personnel) . Évalué à 1.
Exact, tu as parfaitement raison, il est bien mieux de fournir le code des tests de performances ne serait-ce que pour montrer l'impartialité du test.
Mais, ce code ayant été fait rapidement, je n'ai pas voulu le publier car pas franchement joli joli...bon, oui, mon excuse vaut ce qu'elle vaut, je mettrais peut être les sources du tests un de ces 4 après un petit ménage...
++
# Interet ?
Posté par Laurent J (site web personnel, Mastodon) . Évalué à 1.
L'intérêt d'un template à la base, c'est de séparer complète la logique métier/controleur, de la génération de la vue. Le code métier injecte les données dans la vue, et basta, il n'a pas à se préoccuper de comment va être rendu à la page, de comment vont être utilisé les données dans l'affichage. Il fourni juste les données.
Et le problème, à mon sens, c'est que Hyla Tpl et consort cassent complètement cette logique MVC.
Ainsi, si on veut changer la manière dont le bloc est affiché, il faut à la fois changer le code du template, mais aussi le code controleur qui manipule le template.
Un exemple : on a un template avec un bloc affiché par une boucle. Et on voudrait adapter le template pour faire un traitement particulier pour le premier élément affiché par exemple, ou casser le bloc en deux. Bref, refaire un remaniement. Avec hylat tpl, il faut modifier le template, mais aussi le code php qui manipule le template.
Alors qu'avec un moteur de template comme smarty (que je n'aime pas particulièrement à cause de sa lourdeur et de sa syntaxe, mais c'est un autre problème), où les instructions de boucles sont dans le template. Il y a une vrai séparation entre le code métier et le code de la vue. Si l'intégrateur veut casser son bloc ou autre pour x raisons, il n'a pas à aller fouiller et modifier le code PHP.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.