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

    Étant newby en Modx, je découvre avec un vrai délice ce cms (j’en ai dit le bien -mérité- que j’en pense dans mon message de présentation).

    J’ai tenté de trouvé de la doc sur ce point qui m’interpelle, mais je m’y suis mal pris, car j’ai rien trouvé; d’où ma venue sur ce post.
    Or, voila une question, sans doute bien basique pour la plupart d’entre vous, que je me pose =

    Quelle est la procédure pour appeler une table mysql (non modx_...). En effet, les fonctions php classiques provoquent une erreur, coté parser.

    /*************************************************************************/
    Error: mysql_select_db(): supplied argument is not a valid MySQL-Link resource
    Error type/ Nr.: Warning - 2
    File: /users/user1847/sites/iuvsta.org/iuvsta2/manager/includes/document.parser.class.inc.php(766) : eval()’d code
    Line: 3

    /*************************************************************************/

    Je suis à peu prés sur qu’il me faille utiliser l’api de connection de modx, mais je ne sais comment faire.
    Par ailleurs, renommer ma table personnelle ’machin’ en ’modx_machin’ aiderait il à utiliser plus facilement les ressources modixiennes pour l’ecriture de snippet et la connectivité api ?

    Le but de cette connection est le suivant : créer des snippets qui aillent interroger cette table, et ressortir automatiquement un élement en fonction de cette qualité.
    exemple : [[president]] permettrait de voir la page comportant ce snippet , afficher le nom, la qualité, et le lien email de celui-ci, à l’endroit indiqué.

    Bon, peut être puis je m’inspirer d’autolink, mais son adéquation à mes besoins ne me semble pas évidente ?

    Au final, j’envisage de créer une liste déroulante dans Tiny Mce proposant la liste de ces snippets "nominatifs". (jai trouvé un post super interessant pour "customiser" en ce sens l’editeur,
    en voici, du reste, la référence : http://modxcms.com/forums/index.php/topic,6566.msg46055.html#msg46055 ).

    En vous remerciant pour votre patience vis à vis d’un débutant en "modx snippeting",
    laugh
    à bientôt
    Jean-François
      • 11975
      • 2,542 Posts
      Salut,

      si la ,table fait partie de la mme base de données, tu n’auras pas à gérer la connection mysql.
      L’ensemble des fonctions de l’API de modx pour acceder à la BDD sont dans /manager/includes/extenders/dbapi.mysql.class.inc.php

      par exemple pour un select
      function select($fields = "*", $from = "", $where = "", $orderby = "", $limit = "")
      


      Dans ton snippet
      $rs = $modx->db->select(’*’,’nom_de_la_table’);


      :-)
        Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
        • 23864
        • 9 Posts
        Merci beaucoup pour l’info.

        J’ai tent de la mettre en oeuvre,
        aussi bien dans la syntaxe function, qua dans la deuxième syntaxe. Je n’ai plus d’erraur de parser, ce qui est tres bien.

        Mais rien n’apparait sur la page qui l’appelle.

        Aussi suis-je encore embété. J’ai essayé avec des instructions d’affichage mysl, et rien non plus. Prou autant, le elect est bien reconnu sous Mysql, et le code php ,généré par PhpMyAdmin est trés proche de celui de la function.

        Voici deux des scripts que j’ai tenté (parmi d’autres sous versions) :
        /**************************************************************************/
        <?php
        // ca n_affiche toujours rien sur la page

        $results = $modx->db->select("prenom, nom, country, email_perso, status", "machin", "status = ’Pres’", "field to order by status");

        ?>

        /**************************************************************************/

        Et en voici 1 autre, plus "myskuélien" :
        /**************************************************************************/
        <?php
        // ca n_affiche toujours rien sur la page
        $sql = ’SELECT nom, prenom, country, email_perso, status FROM machin WHERE status LIKE ’’Pres’’ ORDER BY status LIMIT 0, 30’;
        $result = $modx->db->query($sql);

        $i = 0;
        while ($i < $nb){ // parcours des résultats de la requête
        $PRENOM = mysql_result($result, $i, "prenom");
        $NOM = mysql_result($result, $i, "nom");
        $STATUS = mysql_result($result, $i, "status");
        $COUNTRY = mysql_result($result, $i, "country");
        $EMAIL = mysql_result($result, $i, "email_perso";

        // j_affiche -enfin je veux afficher- les informations de l_enregistrement en cours
        echo " <a href=mailto:$EMAIL?subject=Online_email>$STATUS $PRENOM $NOM</a>, ($COUNTRY)";
        $i++;
        }
        ?>
        /**************************************************************************/
        J’ai trouvé dans les docs la commande return, que je vois dans le descriptif des functions, mais pas dans les exemples. De ce fait, j’avais compris que la simple fonction result afficherait, intégrant la commande return.
        Ce qui ne doit pas être le cas.

        Merci encore pour ton aide, et désolé pour le côté encore basique de mes questions.
        Jean-François
          • 11975
          • 2,542 Posts
          Salut,

          voici un exemple complet:

          <?php
          
          		if($result = $modx->dbQuery($sql)){
                  //cette partie provient de wayfinder ou ditto
                  $resourceArray = array();
          
                  	for($i=0;$i<@$modx->recordCount($result);$i++)  {
          
                    		array_push($resourceArray,@$modx->fetchRow($result));
          
                  	}
                  
                  return $resourceArray;
                  	
                  }else{
                  return false;
                  }
          


          :-)
            Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
            • 16732
            • 592 Posts
            @Primo : Je crois que le problème vient effectivement du fait que tu oublies le return, donc tu n’obtiens rien en sortie.

            Ce bout de code devrait fonctionner (du moins avec une requête sql valide wink ) :
            <?php
            $sql_query =  'SELECT nom, prenom, country, email_perso, status FROM machin WHERE status LIKE ''Pres'' ORDER BY status LIMIT 0, 30';
            $result = $modx->db->query($sql_query);
            while($enr=mysql_fetch_array($result)) {
                  $nom = $enr["nom"];
                  $prenom = $enr["prenom"];
                  //etc..
            }
            output =  $nom.' '.$prenom;
            return output;
            ?>
            


              • 23864
              • 9 Posts
              Grand merci pour cette révision de code. Ca marche impeccable

              (deux toutes petites coquilles, qui une fois résolues, font tourner le scriipt impeccablement ;-) :
              autour de Pres , le copié collé traduit chaque double côte par deux fois des simples cotes .
              et l’output final est une fonction à écrire , donc, $output, d’où l’écriture finale :
              <?php
              $sql_query = ’SELECT nom, prenom, country, email_perso, status FROM machin WHERE status = "Pres" ORDER BY status LIMIT 0, 30’;
              $result = $modx->db->query($sql_query);
              while($enr=mysql_fetch_array($result)) {
              $nom = $enr["nom"];
              $prenom = $enr["prenom"];

              }
              $output = $nom.’ ’.$prenom;
              return $output;
              ?>

              (Ces remarques pour des lecteurs en même recherche que moi)

              Merci encore à chacun pour l’élégance de vos codes
                • 11975
                • 2,542 Posts
                Salut,

                pourquoi vous entêtez à utiliser les functions php (mysql_fetch_array) qd vous pouvez utiliser l’API MODX

                /**
                * @name: getRow
                * @desc: returns an array of column values
                * @param: $dsq - dataset
                *
                */
                function getRow($ds, $mode = ’assoc’) {
                if ($ds) {
                if ($mode == ’assoc’) {
                return mysql_fetch_assoc($ds);
                }
                elseif ($mode == ’num’) {
                return mysql_fetch_row($ds);
                }
                elseif ($mode == ’both’) {
                return mysql_fetch_array($ds, MYSQL_BOTH);

                } else {
                global $modx;
                $modx->messageQuit("Unknown get type ($mode) specified for fetchRow - must be empty, ’assoc’, ’num’ or ’both’.");
                }
                }
                }
                  Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
                  • 16732
                  • 592 Posts
                  Quote from: heliotrope at Jun 22, 2007, 02:14 AM

                  Salut,
                  pourquoi vous entêtez à utiliser les functions php (mysql_fetch_array) qd vous pouvez utiliser l’API MODX
                  Parce ce que c’est plus rapide quand on a commencé à utiliser PHP avant de découvrir MODx, que ces fonctions ne sont pas bien documentées et que pour ainsi dire elles n’apportent pour le moment pas vraiment de + par rapport à la syntaxe traditionnelle wink

                  @Primo : oui pour les coquilles, je suis allé un peu vite d’ou l’oubli du ’$’ pour output, c’était juste pour te montrer la logique.