We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 10957
    • 32 Posts
    Bonjour,
    j’essaye de faire quelque chose de relativement basique : dans un chunck (correspondant à un template Ditto), je veux afficher du code html si le contenu du document n’est pas vide. J’ai essayer de le faire avec phx mais impossible d’évaluer [+content+] (sans doute parce que la chaîne est très longue et contient des caractères qui déplaise à phx). Donc je décide de créer un snippet IfContentSetThenDisplay qui me permet de tester le contenu d’un document et d’afficher une chaine de caractère s’il n’est pas vide. Voici comment je l’appelle dans mon chunk :

    [[IfContentSetThenDisplay? &docid=`[+id+]` &display=`<a href="/[~[+id+]~]">`]]


    et voici mon snippet :
    <?php
    $doc = $modx->getDocumentObject('id',$docid);
    if ($doc['content']!=''){
        return $display;
    }
    return '';
    ?>
    

    Le contenu est bien évalué mais au lieu d’afficher ma chaîne <a href="/[~[+id+]~]"> , le snippet n’affiche que <a hre
    (c’est la valeur de $display)
    Est-ce une restriction sur le type de chaînes ou de caractère que l’on peut passer en paramètre d’un snippet ?
      • 8894
      • 114 Posts
      En effet, certains caractères ne sont pas acceptés dans les paramètres, notamment le signe =.
      C’est dû à une limitation du parser de MODx, qui, je crois, est levée dans la version 0.9.7

      Une solution que j’ai utilisé dans ce cas : utiliser une autre chaîne dans mon paramètre (par ex #eq#), que le code de mon snippet remplace par le caractère adéquat.
        • 10957
        • 32 Posts
        Merci pour ta réponse. J’ai testé ta solution mais bcp de caractères semblent poser pb au parser MODx. Je suis arrivé à :

        [[IfContentSetThenDisplay? &docid=`[+id+]` &display=`<a href#eq##quot#/[~[+id+]~]#quot#>`]]

        remplacé via le snippet :
        $original= array('#eq#','#quot#');
        $new= array('=', '"');
        $display=str_replace($original,$new, $display, $count);

        donne:
        <a href="


        avant de buter sur l’impossibilité de remplacer le "/" (résultats incohérents)
        Au final, je vais écrire un snippet qui me fera l’écriture de tous le code html de mon chunk, solution moins lisible je trouve mais j’ai passé bcp de temps sur ce pb et il semble que le parser MODx n’est pas adapté pour le traitement de chaine html passée en paramètre...
        Merci en tout cas pour ton aide.
          • 16732
          • 592 Posts
          Pourquoi ne pas mettre tes display dans des chunks et les passer en paramètre ?

          Dans ton snippet tu n’as plus qu’a utiliser getChunk

          Appel : [!IfContentSetThenDisplay? &docid=`[+id+]` &display=`lien`!]

          Chunk lien : <a href="[~[+id+]~]">[+pagetitle+]</a>

          Snippet
          <?php
          $doc = $modx->getDocumentObject('id',$docid);
          if ($doc['content']!=''){
             $output = $modx->getChunk($display);
          }
          
          return $output;
          ?>
            • 10957
            • 32 Posts
            Ta solution est effectivement meilleure Laurent, elle me gêne un peu tout de même puisqu’elle oblige à multiplier les chunks pour des chaînes de caractères qu’il serait plus logique et efficace pour la maintenance de mettre à jour directement dans le document où elles sont affichées (plutôt que d’aller ouvrir le chunk correspondant).
            Mais je vais suivre cette voie, en attendant, comme beaucoup ici, la nouvelle version de MODx wink