We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 42810
    • 8 Posts
    Bonjour, j'ai un site internet sous evo 0.9.6. Voulant faire de ce site un site multilingue, je suis donc passé à revo avec babel.
    Autant vous dire que l'adaptation entre les deux version est très longue étant donné qu'il n'y avait pas de migration possible.
    Après plusieurs semaines de travail de fourmi, je commence à voir le jour mais un snippet me pose vraiment des souci....
    Impossible de l'adapter à revo....
    Ce snippet affiche sur ma page, un commentaire aléatoire de satisfaction client (enregistrer dans ma table modx_site_content).

    Voici mon snippet fonctionnant sous evo:

    // Connection à la base de donnée:
    $table = $modx->getFullTableName("site_content");
    
    // Initialisation de l'output
    $output = '';
    
    // Requéte   
          $Sql = "";
          $Sql .= "SELECT  id,pagetitle, IF(CHAR_LENGTH(content) > 310, CONCAT(LEFT(content,310), '...'), content) AS content FROM $table WHERE ";
          $Sql .= "(parent = 41 OR parent =44 ";
          $Sql .= "OR parent=47 OR parent=50 ";
          $Sql .= "OR parent=53 OR parent=56 ";
          $Sql .= "OR parent=112) ";
          $Sql .= "AND published = 1";
          $Sql .= " ORDER BY RAND()";
          $Sql .= " LIMIT 1;";
    
    //Résultat     
    $resultat = $modx->dbQuery($Sql);
      
    //Tableau assossiatif      
            $array= mysql_fetch_assoc($resultat);
    
    //Affichage
            $lien = $array['id'];
            echo $array['pagetitle'];
            echo "<br>";
            echo "<br>";
            echo $array['content'];
            echo "<p><A HREF='/[~".$lien."~]'>"."Lire le témoignage"."</A></p>";


    J'ai bien essayer de passé par xpdo, pdo, .... bref inpommsible de mettre au point un code fonctionnant
    Pouvez-vous m'aider s'il vous plais?
    Merci d'avance
      • 33976 ☆ A M B ☆
      • 571 Posts
      Bonjour littlekev34, et bienvenue sur les forums smiley

      <?php
      /**
       * @var modX $modx
       * @var array $scriptProperties
       */
      
      $c = $modx->newQuery('modDocument');
      $c->select(array(
          'id',
          'pagetitle',
          "IF(CHAR_LENGTH(content) > 310, CONCAT(LEFT(content,310), '...'), content) AS content",
      ));
      $c->where(array(
          'parent:IN' => array(41, 44, 47, 50, 53, 56, 112),
          'published' => true,
      ));
      $c->sortby('RAND()');
      $c->limit(1);
      
      // Décommenter pour voir la query
      //$c->prepare();
      //$modx->log(modX::LOG_LEVEL_ERROR, $c->toSQL());
      
      /** @var $resource modDocument */
      $resource = $modx->getObject('modDocument', $c);
      if (!$resource) {
          return 'woups!';
      }
      $resArray = $resource->toArray('', false, true);
      
      $lien = $modx->makeUrl($resArray['id']);
      
      return "{$resArray['pagetitle']}
      <br><br>{$resArray['content']}
      <p><a href=". $lien .">Lire le témoignage</a></p>";
      


      Cela devrait faire l'affaire normalement…

      Bon courage pour la suite du portage!
        • 42810
        • 8 Posts
        Merci beaucoup!!!
        ca marche presque parfaitement.
        En faite à ce snippet, j'ai associé un autre qui rafraichi ma div toute les 10s afin de faire tourné en RAND() tout les commentaires.
        <?php
        ?>
        
        <script src="http://ajax.googleapis.com/ajax/
        libs/jquery/1.3.0/jquery.min.js"></script>
        <script>
        $.ajaxSetup ({
            // enlève le cache pour IE
            cache: false
        });
        var auto_refresh = setInterval(
        window.onload=function()
        {
        $('#bloc').slideUp().load('/interne/contenualeatoireilsontdit.html').slideDown();
        }, 10000);
        </script>
        <div id="bloc"></div>
        <?php
        ?>

        donc j'ai bien mon com qui s'affiche, encore mille merci smiley, il se rafraichi toute les 10s, mais.... il ne change pas, lol
          • 33976 ☆ A M B ☆
          • 571 Posts
          Je suppose que le snippet est appelé caché ([[snippet]] au lieu de [[!snippet]]) ce qui fait que le snippet est exécuté une première puis mis en cache jusqu'à ce que le cache de MODX soit vidé

          Histoire de tenter d'abstraire un peu ce snippet :

          <?php
          /**
           * @var modX $modx
           * @var array $scriptProperties
           */
          
          // Paramètres du snippet
          $tpl = $modx->getOption('tpl', $scriptProperties);
          $parents = $modx->getOption('parents', $scriptProperties);
          $limit = $modx->getOption('limit', $scriptProperties, 1);
          $sortBy = $modx->getOption('sortBy', $scriptProperties, 'id');
          $sortDir = $modx->getOption('sortDir', $scriptProperties, 'RAND()');
          $debug = $modx->getOption('debug', $scriptProperties);
          
          $c = $modx->newQuery('modDocument');
          $c->select(array(
              'id',
              'pagetitle',
              "IF(CHAR_LENGTH(content) > 310, CONCAT(LEFT(content,310), '...'), content) AS content",
          ));
          $c->where(array(
              'parent:IN' => explode(',', $parents),
              'published' => true,
          ));
          $c->sortby($sortBy, $sortDir);
          $c->limit($limit);
          
          if ($debug) {
              // si &debug a une valeur, on log la query
              $c->prepare();
              $modx->log(modX::LOG_LEVEL_ERROR, $c->toSQL());
          }
          
          /** @var $resource modDocument */
          $resource = $modx->getObject('modDocument', $c);
          if (!$resource) {
              return 'woups!';
          }
          $resArray = $resource->toArray('', false, true);
          
          return $modx->getChunk($tpl, $resArray);
          


          Ce qui va permettre d'utiliser le snippet comme suit :

          [[!snippet?
              &parents=`1,2,3,4` // les parents dans lesquels effectuer la query
              &tpl=`nom_du_chunk` // le chunk de "mise en forme"
              &limit=`2` // pour avoir 2 résultats au lieu d'un
              &debug=`1` // logger la query dans les logs MODX
              &sortBy=`id` // effectuer un classement sur les IDs des ressources
              &sortDir=`DESC` // pour afficher les ressources ayant les IDs les plus "élevées" (les dernières ressources créées)
          ]]
          


          avec un chunk qui ressemblera à :

          [[+pagetitle]]
          <br /><br />
          [[+content]]
          <p><a href="[[~[[+id]]]]">Lire…</p>
          
            • 42810
            • 8 Posts
            Merci, il s'agissait tout simplement de [[!snippet]] au lieu de [[snippet]].
            Encore mille merci a toi!