We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 18219
    • 826 Posts
    Bonjour à tous,

    Quelqu’un peux t il donner quelques explications sur ce post ?

    Je voudrais comprendre l’intérêt et son usage
    Merci wink
      Marc
      I'm French... Sorry for my bad English, I use ' Google Translator' or other... but that remains that tools wink
      • 33175
      • 711 Posts
      Bonjour Marc,

      Je viens de regarder d’un peu plus près cette librairie. Elle est vraiment intéressante en terme de "coding".
      Je n’ai qu’un seul reproche à faire (je préfère le faire de suite pour que vous ne restiez pas sur une mauvaise impression) : la syntaxe n’est pas très évidente pour quelqu’un qui ne connait pas les moteurs de template (smarty, ...) et surtout, si un tag venait à être mal écrit, le rendu visuel ne ressemblerait plus à rien.
      Je le déconseille donc au site où un non développeur peut modifier les chuncks lui même. Bien évidemment quelqu’un de très soigné n’aura aucun problème à ne pas modifier les tags. Mes craintes se justifient si le site est livré tel quel au client et que chez lui, aucune personne compétente n’est présente. Je parle (hélas !) par expérience.

      Ces remarques mises à part, c’est un excellent outil que nous à fournit Wendy. C’est vraiment du bon boulot !
      J’en vois principalement l’intérêt pour tout ce qui est interface d’administration (pour les modules par exemple car le code ne sera par retouché par hasard).

      En résumé, chunktpl permet :

      • d’utiliser un chunk ou un fichier comme modèle pour la mise en page
      • de remplacer des tags par des valeurs (du texte, des dates ou ce que vous voulez)
      • de modifier la présentation de base du modèle en récupérant uniquement les portions souhaitées et dans l’odre qu’on souhaite
      • de changer le rendu visuel de manière conditionnelle (chunktpl utilise telle partie du chunk ou telle autre partie en fonction de la condition)
      • de formater les dates et les nombres (hélas, ça fait parti des "todo")
      • gestion des thèmes (j’avoue que j’ai pas compris ce qu’étais un thème, je crois que c’est un fichier texte de modèle)
      • de répéter une portion du chunk pour créer une liste (suite de lien, suite de div, suite de ce qu’on veut)

      Je pense n’avoir rien oublié.

      C’est un outil très intéressant, surtout pour les interfaces des modules (je sais, je me répète wink).
      De premier abord, le code à l’air bien optimisé, ce qui me laisse penser que les performances sont au rendez-vous.
      Les fonctions sont simples à utiliser mais il est tout de même conseillé ce bien regarder les exemples pour ceux qui ne connaissent pas ce genre d’outil.
      Cette librairie est un classe, ce qui permet de l’étendre facilement si besoin est (pour gérer les format des dates par exemple).

      Bref, chunktpl est certainement une librairie à utiliser pour les futurs développement.

      :)
        Sorry for my english. I'm french... My dictionary is near me, but it's only a dictionary !
        • 18219
        • 826 Posts
        Hum, je reprends les explications que je t’ai envoyé par PM :
        Ce n’est pas Wendy mais Djamoer wink (Edit : il s’agit bien de Wendy : en fait Djamoer et Wendy est la même personne)

        Si j’ai bien compris la librairie, il s’agit de scinder le template en plusieurs parties :
        {[=TplPart Header=]} pour le header
        {[=TplPart Content=]} pour le content
        etc.
        {[=TplPart Condition_True=]} La partie la plus intéressante car elle introduit la notion d’opérateurs de conditions. On peut imaginer son usage dans le snippet MaxiGallery : en fonction de la valeur du paramètre &embedtype ([ "slidebox" | "lightboxv2" | "popup" | "external" ]) les instructions dans le header peut-être modifiées entre les balises <script...>...</script>.
        Mais là, j’ai des difficultés de compréhension. Le template est interprété dans les premières lignes du document (balise <link> dans le header). Comment l’appel du snippet plus bas dans le document permet de modifier des instructions déjà prises en compte ?

        C’est pourquoi j’ai demandé de l’aide sur le sujet.
        Merci de ton aide et tes explications.
          Marc
          I&#39;m French... Sorry for my bad English, I use &#39; Google Translator&#39; or other... but that remains that tools wink
          • 18219
          • 826 Posts
          Message envoyé par Guillaume par PM, (Nous allons continuer la réflexion sur le forum) :
          Quote from: Guillaume at May 22, 2006, 11:15 AM

          Djamoer est Wendy wink

          {[=TplPart Header=]} à première vue est pour le header. Je suis d’accord smiley
          {[=TplPart Toto=]} est pour ? ce que tu veux smiley En fait, cette ligne indique que la section Toto commence juste après celle-ci et va jusqu’à la prochaine balise {[=TplPart xxxxx=]}.
          A l’aide de la librairie, tu indiques simplement que tu veux récupérer le contenu de la section Toto
          $output .= $tplObject->parseTpl('Toto');

          {[=TplPart Condition_True=]} Le plus intéressant car il est introduit des opérateurs de conditions. On peut imaginer son usage dans le snippet MaxiGallery : en fonction de la valeur du paramètre &embedtype ([ "slidebox" | "lightboxv2" | "popup" | "external" ]) les instructions dans le header peut-être modifiées entre les balises <script...>...</script>.
          Mais là, j’ai des difficultés de compréhension. Le template est interprété dans les premières lignes du document (balise <link> dans le header). Comment l’appel du snippet plus bas dans le document permet de modifier des instructions déjà prises en compte ?
          Dans ton cas, on va dire que tu utilises un chunk.
          En premier, tu dit que tu utilises le chunk MonTpl :
          $tplObject = new chunkTpl('MonTpl', false);

          A ce moment, le chunk est "parsé".
          Si tu utilises un fichier, il faut
          $tplObject = new chunkTpl(NULL, true);
          $tplObject->parseTheme('montheme', false); // parse manuellement le fichier
          

          Ensuite, tu indiques quels tags prennent quelles valeurs et tu ajoutes la parties souhaitées à ta sortie :
          $tplObject->setTplVar('toto', 'PageTitle', 'Ma Page Toto'); // dans la section toto, le tag PageTitle sera remplacé par "Ma Page Toto"
          $output .= $tplObject->parseTpl('Toto'); // parsing de la section toto et renvoie de la section Toto traitée dans $output

          Ensuite, tu définis tes conditions, et tu parses :
          $titiDataVrai['premiermot'] = '1er mot si c\'est vrai'; // les valeurs des tags
          $titiDataVrai['deuxiememot'] = '2e mot si c\'est vrai'; // les valeurs des tags
          $titiDataFaux['premiermot'] = '1er mot si c\'est faux'; // les valeurs des tags
          $titiDataFaux['deuxiememot'] = '2e mot si c\'est faux'; // les valeurs des tags
          if($_GET['test']=='false') $condition = false;
          else $condition = true;
          $output .= $tplObject->outputCondition('Titi', $condition, $titiData, $titiData); // on récupère le code traité en fonction de la condition

          Si dans ton template, tu as :
          {[=TplPart Titi_True=]}
          <p>La condition est vrai : voici le 1er mot "{+premiermot+}" et le 2e "{+deuxiememot+}" !</p>
          {[=TplPart Titi_False=]}
          <p>Désolé, la condition est fausse : le 1er mot "{+premiermot+}" et le 2e "{+deuxiememot+}" parce que c’est faux !</p>
          ça te donnera
          La condition est vrai : voici le 1er mot "1er mot si c’est vrai" et le 2e "2e mot si c’est vrai" !
          sic’est vrai, et si c’est faux :
          Désolé, la condition est fausse : le 1er mot "1er mot si c’est faux" et le 2e "2e mot si c’est faux" parce que c’est faux !

          Ensuite, il faut jouer avec les variables pour générer la sortie convenablement. D’après ce que j’ai compris, il faudrait que tu génères le contenu avant l’entête.
          Dans ce cas, je pense qu’il faudra faire
          $content = /* code pour générer le contenu */;
          $header = /* code pour générer le header */;
          $output = $header . $content;


          J’espère que je t’ai éclairé smiley

          Merci pour cette réponse Guillaume.

          C’est vrai que le principe s’apparente à smarty où les variables sont remplacées au fils de la lecture du template par le parser. J’avais bien compris la philosophie.
          Reste à savoir si le template peux-têtre modifier en fonction d’un paramètre passé dans un snippet :

          Je reprend ma réflexion :

          Comme le template est interprété dans les premières lignes du document (balise <link> dans le header). Comment l’appel du snippet plus bas dans le document permet de modifier des instructions déjà prises en compte ?
          Le template est décomposé en plusieurs parties. Il est interprété dès les premières lignes par le parser de la librairie `chunktpl`. Entre les balises <head> on inscrit les balises <script>. Hors pour certains snippets comme MaxiGallery le contenu des balises <script> dépend du paramètre ’&embedtype’ qui indique de quelle façon l’affichage doit être rendu.
          Or l’appel de ce snippet est effectué dans le document de MODx. Traduit autrement, cet appel est contenu dans la variable [*#content*] positionnée dans les balises <body>.
          Je ne vois pas comment les instructions du haut de la page puissent être modifiées.

          Je me demande comment gérer convenablement la sortie de tous ces éléments.
          Avez-vous une idée ?
            Marc
            I&#39;m French... Sorry for my bad English, I use &#39; Google Translator&#39; or other... but that remains that tools wink
            • 33175
            • 711 Posts
            Je ne connais pas MaxiGallery.
            Mais d’après ce que je comprend, le snippet MaxiGallery génère une page complète (entête <head></head> y compris).
            Dans ce cas, il suffit de placer la condition juste avant les balises <script> en fonction du paramètre.
            Peut être, utiliser le template "blank" de Modx pour la page qui contient le snippet. Ce snippet génèrera les balises qui lui faut en fonction des paramètres qui lui sont passés.

            Si on utilise le template par défaut du site, il faut voir pour que MaxiGallery ne génère pas les entêtes, et placer les balises script en début du contenu généré MaxiGallery (juste après la balise body par exemple).
              Sorry for my english. I&#39;m french... My dictionary is near me, but it&#39;s only a dictionary !
              • 18219
              • 826 Posts
              Quote from: Guillaume at May 22, 2006, 12:32 PM

              Je ne connais pas MaxiGallery.
              Mais d’après ce que je comprends, le snippet MaxiGallery génère une page complète (entête <head></head> y compris).
              Hum. Je pensais que tu avais regardé ce snippet. Je l’ai pris comme exemple car je travaille dessus.
              Pour information, MaxiGallery ne génère pas une page complète. En fonction de l’affichage que l’on souhaite, nous devons placer dans l’entête les instructions comprises entre les balises <script>.
              Pour ma part, je les ai intégrés directement dans le template. Mais cela ne représente pas une solution optimisée. Sur les autres pages du site, les lignes correspondantes au <script> sont envoyées par le serveur.
              Autre point avec cette solution, je ne peux pas mixer les différents modes d’affichage avec un même template.

              Dans ce cas, il suffit de placer la condition juste avant les balises <script> en fonction du paramètre.
              Peut être, utiliser le template "blank" de Modx pour la page qui contient le snippet. Ce snippet génèrera les balises qui lui faut en fonction des paramètres qui lui sont passés.

              Oui, c’est une solution si le snippet génère la page complète ce qui n’est pas le cas.
              Si on utilise le template par défaut du site, il faut voir pour que MaxiGallery ne génère pas les entêtes, et placer les balises script en début du contenu généré MaxiGallery (juste après la balise body par exemple).
              J’y ai pensé. Au final le code généré présente un mixage de langage HTML, JS puis à nouveau HTML puis JS etc.
              Mais c’est vrai que cette solution fonctionne. Pas propre le code mais fonctionnel. Pourquoi se compliquer la vie ? laugh

              En tout cas, merci pour ton aide et tes suggestions. Ils m’ont été utiles. wink
                Marc
                I&#39;m French... Sorry for my bad English, I use &#39; Google Translator&#39; or other... but that remains that tools wink