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

    Je souhaite afficher une TV perso dans le résultat des recherches à la suite de pagetitle et de longtitle...

    1. J’ai créé la TV [*photo-copyright*]

    2. L’appel se précente comme suit :

    [!AjaxSearch? 
    &whereSearch=`content:pagetitle,longtitle|tv:photo-copyright`
    &tvPhx=`tv:displayTV`
    &withTvs=`+:photo-copyright`
    &AS_landing=`8` 
    &moreResultsPage=`8` 
    &showMoreResults=`0`
    &jscript=`jquery` 
    &addJscript=`0`
    &opacity=`0.9` 
    &liveSearch=`1`
    &clearDefault=`1`
    &parents=`290,60,59,58,`
    &depth=`3`
    &jsJquery=`assets/templates/js/jquery.js`
    &ajaxMax=`50`
    !]


    3. Dans ajaxResult.tpl.html, j’ai indiqué ceci :
    <div class="[+as.resultClass+]">
    <a class="[+as.resultLinkClass+]" href="[+as.resultLink+]" title="[+as.longtitle+] [+as.pagetitle+] [+as.photo-copyright+]">[+as.pagetitle+] [+as.longtitle+] [+as.photo-copyright+]
    </a>
    </div>
    






    Le résultat renvoie uniquement longtitle et pagetitle...

    Quelqu’un aurait-il une solution pour dompter la bête ?

    Merci beaucoup
      • 5811
      • 1,717 Posts
      Bonjour,

      La Tv ne sera affichée que si le mot recherché est trouvé dans une TV. C’est une limitation de la version actuelle (1.8.4)
      Donc en l’occurence [*photo-copyright*] ne sera pas affiché.

      Quelques explications (en anglais ici): http://modxcms.com/forums/index.php/topic,38383.msg260872.html#msg260872
        • 1687
        • 25 Posts
        Bonjour Coroico et merci pour ta réponse.

        Je me suis dit, si je ne peux afficher une TV Custo dans mon document, je vais essayer de placer une TV de document (non utilisée) des parents pour faire apparaître par exemple le nom de la section du site.

        J’ai essayé de faire apparaître la pagetitle des parents avec le snippet Getfield, mais AS qui accepte bien &docid=’58’(par exemple) ne renvoie rien avec &docid=’[+parent+]’.

        Est-ce une limitation ?
        Existe-t-il une solution ?


        Merci beaucoup
          • 5811
          • 1,717 Posts
          J’ai essayé de faire apparaître la pagetitle des parents avec le snippet Getfield, mais AS qui accepte bien &docid=’58’(par exemple) ne renvoie rien avec &docid=’[+parent+]’.

          Est-ce une limitation ?
          Existe-t-il une solution ?
          Je pense que cela vient du fait que la fonction par defaut, defaultStripOutput, de AjaxSearch filtre les tags MODx en sortie, donc l’appel [+parent+]. Voici la doc (voir la classe search.class.php - en fin de fichier) :
          ---- &stripOutput user function    (optional)
                  to transform on fly the result output
                  by default: defaultStripOutput
          
                  StripOutput user function should be define in the config file as follow :
          
                  // string functionName(string $text)
                  // functionName : name of stripOutput function passed as &stripOutput parameter
                  // $text : string php variable name as results
                  // return the filtered results
                  /*
                  function myStripOutput($text){
          
                      Any Php code which filter the results
                      The following internal functions could be called:
                        $text = stripTags($text); // strip all the MODx tags
                        $text = stripJscript($text); // strip jscript
                        $text = stripLineBreaking($text); // replace line breaking tags with whitespace
                        $text = stripHtml($text); // strip all the html tags
          
                      You could also developp you own filter based on regular expressions.
                      See http://fr.php.net/manual/en/intro.pcre.php
          
                    return $text;
                  }
                  */
          
                  By default : defaultStripOutput function will be used if &stripOutput parameter
                  is not set or if the function is not defined :
          
                  function defaultStripOutput($text){
          
                    // replace line breaking tags with whitespace
                    $text = stripLineBreaking($text);
                    // strip modx sensitive tags
                    $text = stripTags($text);
                    // strip Jscript
                    $text = stripJscripts($text);
                    // strip html tags. Tags should be correctly ended
                    $text = stripHTML($text);
          
                    return $text;
                  }
          
          la fonction stripTags prend donc un malin plaisir a supprimer tout ce que vous avez pu écrire d’intelligent avec MODx ... laugh
          /**
          * stripTags : Remove modx sensitive tags
          */
          function stripTags($text){
          // Regular expressions of things to remove from search string
          $modRegExArray[] = ’~\[\[(.*?)\]\]~’; // [[snippets]]
          $modRegExArray[] = ’~\[!(.*?)!\]~’; // [!noCacheSnippets!]
          $modRegExArray[] = ’!\[\~(.*?)\~\]!is’; // [~links~]
          $modRegExArray[] = ’~\[\((.*?)\)\]~’; // [(settings)]
          $modRegExArray[] = ’~{{(.*?)}}~’; // {{chunks}}
          $modRegExArray[] = ’~\[\*(.*?)\*\]~’; // [*attributes*]
          $modRegExArray[] = ’~\[\+(.*?)\+\]~’; // [+phx+]

          // Remove modx sensitive tags
          foreach ($modRegExArray as $mReg)$text = preg_replace($mReg,’’,$text);
          return $text;
          }

          Comme les résultats AjaxSearch sont traités avant que le parser ne traite le document, il est fort probable que je filtre l’appel Getfield avant.

          Pour le tester c’est simple tu définis dans un fichier de config "maConfig", une fonction "filtreAffichage" sans l’appel à la fonction stripTags, par exemple:

          function filtreAffichage($text){
          
            $text = stripJscript($text); // strip jscript
            $text = stripLineBreaking($text); // replace line breaking tags with whitespace
            $text = stripHtml($text); // strip all the html tags
          
            return $text;
          }


          et tu ajoutes dans ton appel AjaxSearch &config=`maConfig` &stripOutput=`filtreAffichage`

          Tu peux aussi redefinir une fonction stripTags et l’ajouter dans ton fichier de config, simplement en commentant la ligne qui traite [+phx+].
          /**
           *  myStripTags : Remove modx sensitive tags (Except Phx)
           */
          function myStripTags($text){
            // Regular expressions of things to remove from search string
            $modRegExArray[] = '~\[\[(.*?)\]\]~';   // [[snippets]]           
            $modRegExArray[] = '~\[!(.*?)!\]~';     // [!noCacheSnippets!]    
            $modRegExArray[] = '!\[\~(.*?)\~\]!is'; // [~links~]
            $modRegExArray[] = '~\[\((.*?)\)\]~';   // [(settings)]
            $modRegExArray[] = '~{{(.*?)}}~';       // {{chunks}}
            $modRegExArray[] = '~\[\*(.*?)\*\]~';   // [*attributes*]
            //$modRegExArray[] = '~\[\+(.*?)\+\]~';   // [+phx+]             // ligne mis en commentaire
          
            // Remove modx sensitive tags
            foreach ($modRegExArray as $mReg)$text = preg_replace($mReg,'',$text);
            return $text;
          }


          Je travaille à la version 1.9 et je me demande maintenant si par défaut la logique voudrais pas que la fonction par défaut laisse tout passer et que ce soit l’utilisateur qui décide ce qui doit être filtré. Autant pour l’input, par sécurité il est logique de tout filtrer autant en sortie, cela ne me semble pas justifié.

          Par contre, lors de la recherche d’un terme, l’extrait de texte autour du mot est par défaut de 200 caractères et on ne tient pas compte du fait que potentiellement une instruction html, javascript ou MODx (appel snippet, Phx, link ...) peut être coupé. Il faudrait donc que j’améliore le pgm d’extraction de façon à ne pas potentiellement coupé une instruction ...

          Je n’ai pas beaucoup de temps pour regarder cela en ce moment, mais je suis preneur des résultats et avis sur le sujet.
            • 1687
            • 25 Posts
            Bonjour Coroico,
            Merci beaucoup pour les informations détaillées et pointues.

            J’ai commenté phx pour la fonction myStripTags, mais le problème persiste.
            J’ai alors utilisé la fonction breadcrumbs pour d’afficher la "pagetitle" du parent.

            Un autre problème est survenu, lors de ma session de debuggage IE7&8...
            &liveSearch renvoie un résultat vide alors que ça fonctionne sous Firefox, Chrome, Safari.
            Par contre le rendu peut se faire sur une landing page.

            Je n’ai pas réussi à résoudre le problème, et comme j’ai vu que tu avais fait un gros travail de mise à jour avec la 1.9, j’ai tenté le coup...

            Et bien le problème IE7&8 &liveSearch est réglé... ça marche.
            Mais cette fois ci, c’est breadcrumbs qui ne marche plus, ni la méthode "commenter myStripTags"... Breadcrumbs n’affiche que la home , mais pas le parent immédiat...


            1. Revenir sur la 1.8.4, en apportant les modifications que tu as faites sur la 1.9 pour la compatibilité IE7&8 ;
            2. Sur la 1.9, trouver un moyen de faire marcher Breadcrumbs ou Getfield ou currentpath (autre snippets qui ne marche pas non plus lorsqu’il est mouliné par AS).


            Encore merci pour ton soutien et un énorme bravo pour ce plugin qui est avec Ditto un incontournable.


              • 1687
              • 25 Posts
              Bizarre...

              J’ai remis une autre version de la 1.8.4 et tout est rentré dans l’ordre...

              C’est donc résolu.
              smiley