Un nouveau moteur de gabarit : Hyla Tpl

Posté par (page perso) . Modéré par Benoît Sibaud.
Tags :
8
12
sept.
2010
PHP
Hyla Tpl est un moteur de gabarit écrit pour remplacer le moteur actuel du projet Hyla (un gestionnaire de fichiers en ligne).

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.
  • # Quoi de neuf en fait ?

    Posté par (page perso) . Évalué à 2.

    C'est la première fois qu'on en parle sur LinuxFr, c'est « nouveau » certes, mais ça l'était aussi il y a presque un an :

    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 . Évalué à 3.

      Ce n'est plus une béta ?
    • [^] # Re: Quoi de neuf en fait ?

      Posté par (page perso) . Évalué à 6.

      C'est maintenant devenu une version stable, utilisable en production, je ne voulais pas faire trop de com tant que le site web et sa documentation n'était pas prêt, c'est le cas maintenant...
      • [^] # Re: Quoi de neuf en fait ?

        Posté par . Évalué à 4.

        tu dis que c'est utilisé en production, est ce que tu peux donner plus d'information sur le sujet ( ie, sur des sites à fort trafic, ou avec une équipe réduite, ou sans développeurs dédiés ) ?
        • [^] # Re: Quoi de neuf en fait ?

          Posté par (page perso) . Évalué à 1.

          Sur un site un fort traffic non (du moins pas à ma connaissance), utilisé en production dans un cadre professionnel, oui.

          C'est stable et fiable, suffisamment pour lancer un développement sérieux avec.
  • # Blocs ELSE

    Posté par (page perso) . Évalué à 2.

    Le formatage a fait sauté l'affichage des blocs else, il faut lire ceci :


    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 (page perso) . Évalué à 1.

      Merci pour la correction !
      • [^] # Re: Blocs ELSE

        Posté par . Évalué à 2.

        À propos de correction, serait-il possible de corriger également les 3 vilaines fautes suivantes ?

        - « Le choix d'avoir garder »
        - « Un forum de discussion à été »
        - « son contenu sera égale »
    • [^] # Re: Blocs ELSE

      Posté par (page perso) . Évalué à 1.

      En fait, il y a aussi le premier exemple :

      <!-- BEGIN line -->
      Hello world
      <!-- END line -->
  • # Un moteur de gabarit ?

    Posté par (page perso) . Évalué à 8.

    Qu'est-ce que donc que c'est chose ?
    • [^] # Re: Un moteur de gabarit ?

      Posté par . Évalué à 0.

      Le cas d’école du syndrome du NIH.
      • [^] # Re: Un moteur de gabarit ?

        Posté par . Évalué à 2.

        En quoi cet exemple tient du syndrome NIH ?

        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 . Évalué à 2.

          Je parlais des moteurs de template en PHP en général. Le truc que tout le monde se sent obligé de réécrire dès qu’il pense avoir un semblant de niveau en PHP.
          Celui-ci en particulier, j’en sais rien. Je connais pas assez son historique.
          • [^] # Re: Un moteur de gabarit ?

            Posté par (page perso) . Évalué à 2.

            >> Celui-ci en particulier, j’en sais rien. Je connais pas assez son historique.

            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 . Évalué à 1.

              Où donc ai-je jugé qui que ce soit de précis dans mon message ?
              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 . Évalué à 6.

        Ce qui me chiffonne avec ces moteurs de template pour PHP, c'est pas que ça existe déjà, c'est surtout qu'on ajoute une nouvelle couche pas forcément nécessaire avec son langage à apprendre, etc... alors que faire des templates directement avec quelques mots clé PHP offre plus de performances, plus de possibilités, le tout sans être plus compliqué.

        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 (page perso) . Évalué à 7.

      Pareil, il a fallut que je lise jusqu'à "Smarty" pour comprendre que "moteur de gabarit" signifie ici "template engine". Cas typique ou l'emploi du Français dans un contexte technique n'ajoute que de la confusion...
  • # Mesure de performances

    Posté par (page perso) . Évalué à 4.

    Bravo pour ce logiciel.
    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 (page perso) . Évalué à 1.

      Salut,

      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 (page perso) . Évalué à 1.

    Je ne comprendrai jamais l'intérêt d'avoir la logique de génération du template en dehors du template lui même, particulièrement tout ce qui concerne les blocs.

    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 à ceux qui les ont postés. Nous n'en sommes pas responsables.