Adaptation module joomla 1.5 pour joomla 3

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Adaptation module joomla 1.5 pour joomla 3

    Chers tous,
    j'essaie d'adapter un module développé pour Joomla 1.5 pour Joomla 3, mais je ne suis pas développeuse et j'essaie de me dépatouiller comme je peux.
    Le module lit un fichier xml déposé sur le serveur et créé automatiquement des articles joomla dans une catégorie donnée à partir des infos de ce fichier xml.
    J'ai réussi à adapter le fichier xml du module, c'est le plus facile.

    mais apparemment la requête sql n'est pas juste, j'obtiens l'erreur suivante :
    Fatal error: Call to undefined function from() in .../modules/mod_newsxmlreader/mod_newsxmlreader.php on line 202

    La requête en ligne 202 est (bidouillée par mes soins):


    $db =& JFactory::getDBO();
    $query->select * from($db->quoteName('#__content'));
    $query->where($db->nameQuote('metadesc').' = '.$db->Quote($updated).' AND '.$db->nameQuote('state').' > '.$db->Quote('-1'));
    $db->setQuery($query);
    $upd = $db->loadAssocList();

    L'original qui fonctionne pour joomla 1.5 :
    $db =& JFactory::getDBO();
    $query = 'SELECT *'.' FROM '.$db->nameQuote('#__content').' WHERE '.$db->nameQuote('metadesc').' = '.$db->Quote($updated).' AND '.$db->nameQuote('state').' >-1';
    $db->setQuery($query);
    $upd = $db->loadAssocList();

    Une bonne âme développeuse pourrait me donner un coup de main ?
    Merci d'avance !
    Catherine

  • #2
    Bonjour Catherine,

    Bienvenue dans le monde impitoyable des développeurs. Impitoyable car PHP ne laisse pas passer les erreurs.....ou presque.

    Regardes sur le lien https://docs.joomla.org/Selecting_da...g_JDatabase/fr

    Tu devrais y voir que :
    $db= JFactory::getDBO(); fonctionne sans le &

    Tu y verras aussi la syntaxe du $query->select et de ses amis qui sont des fonctions donc avec des parenthèses, ....

    Tu peux essayer
    Code PHP:
    $db JFactory::getDbo();
    $query $db->getQuery(true);
    $query->select('*')
    ->
    from($db->quoteName('#__content'))
    ->
    where($db->quoteName('metadesc').' = '.$db->quoteName($updated).' AND '.$db->nameQuote('state').' > -1'));
    $db->setQuery($query);
    $upd $db->loadAssocList(); 
    Pascal
    If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

    Commentaire


    • #3
      Merci Pascal de te pencher sur mon problème, je sais bien que le code ne souffre pas d'à peu près :-) j'essaie de comprendre ce que j'écris mais je n'ai pas encore l'oeil bien affuté!
      J'ai testé ta proposition, ça avance, j'ai maintenant l'erreur suivante:
      You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '>-1' at line 3

      Commentaire


      • #4
        Comme écrit précédemment, pas d'approximation, même pour moi

        Ce n'est pas $db->nameQuote mais $db->quoteName

        Pascal
        If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

        Commentaire


        • #5
          C'est encore mieux... :-)
          mais maintenant j'ai cette erreur: 1054 - Unknown column '20180409T081741Z' in 'where clause'
          qui pour le coup je suppose dépend plus de la programmation même du module que d'erreurs de syntaxe :-(

          Commentaire


          • #6
            Je pense qu'il s'agit du contenu de la variable $updated.

            Pascal
            If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

            Commentaire


            • #7
              Ce n'est pas $db->quoteName($updated), c'est $db->quote($updated).

              quoteName est la fonction qui met des guillemets ` autour des noms de colonnes MySQL, tandis que quote met des guillemets ' autour des variables.
              Tous les services pour les sites Joomla! : sécurité, nettoyage de sites piratés, hébergement, SEO, applications Fabrik, migration, compatibilité mobiles, accessibilité, ...
              Administrateur certifié Joomla! 3
              https://www.betterweb.fr

              Commentaire


              • #8
                Merci, ça arrange encore un peu plus :-) ... maintenant j'ai le message suivant...
                1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM `#__content`,`#__content` WHERE `metadesc` = '20180411T054257Z' AND `' at line 1

                Commentaire


                • #9
                  Bonjour Catherine,

                  Peux-tu nous remettre ta commande SQL complète car il doit encore manquer un petit quelque chose ?

                  Pascal
                  If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

                  Commentaire


                  • #10
                    Voilà le morceau de code un peu plus large, peut être qu'avec le fichier intégral (il fait 250 lignes), vous auriez une meilleure vision du pb potentiel ?

                    Code PHP:
                    $mainframe JFactory::getApplication();
                    $new='index.xml';

                    $path=$param;
                    $objDOM = new DOMDocument();
                    $objDOM->load($path.$new);
                    $updated $objDOM->getElementsByTagName("ThisRevisionCreated")->item(0)->nodeValue;
                    $driver $objDOM->getElementsByTagName("NewsComponent");

                    $db JFactory::getDbo();
                    $query $db->getQuery(true);
                    $query->select('*')
                    ->
                    from($db->quoteName('#__content'))
                    ->
                    where($db->quoteName('metadesc').' = '.$db->quote($updated).' AND '.$db->quoteName('state').' > -1');
                    $db->setQuery($query);
                    $upd $db->loadAssocList(); 
                    Merci de votre aide, c'est vraiment sympa!

                    Commentaire


                    • #11
                      Vous êtes sûre du message d'erreur, parce que ce n'est pas normal d'avoir FROM `#__content`,`#__content` WHERE. Si c'est vraiment ça le message, l'erreur vient de là mais pourquoi ... ?
                      Tous les services pour les sites Joomla! : sécurité, nettoyage de sites piratés, hébergement, SEO, applications Fabrik, migration, compatibilité mobiles, accessibilité, ...
                      Administrateur certifié Joomla! 3
                      https://www.betterweb.fr

                      Commentaire


                      • #12
                        Cliquez sur l'image pour l'afficher en taille normale

Nom : Screenshot-2018-4-12 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server ve[...].png 
Affichages : 41 
Taille : 88,1 Ko 
ID : 1979762

                        oui, c'est le message qui apparait !
                        Fichiers joints
                        Dernière édition par cat1910 à 12/04/2018, 09h12

                        Commentaire


                        • #13
                          Et c'est le seul endroit où il y a cette requête ? Pouvez-vous ajouter

                          echo $query->dump(); exit;

                          après $db->setQuery($query); puis recharger la page et copier la requête qui s'affiche pour voir la tête qu'elle a vraiment, parce qu'avec le code, je ne vois rien qui cloche.
                          Tous les services pour les sites Joomla! : sécurité, nettoyage de sites piratés, hébergement, SEO, applications Fabrik, migration, compatibilité mobiles, accessibilité, ...
                          Administrateur certifié Joomla! 3
                          https://www.betterweb.fr

                          Commentaire


                          • #14
                            Bonjour,

                            j'ai remis la requête sous la forme ou elle était écrite à l'origine pour Joomla 1.5, avec les corrections apportées par Pascal et vous même.
                            Ca donne ceci:

                            Code PHP:
                            //$path=$param.$categorias[$cat];
                            $path=$param;
                            //$objDOM = new DOMDocument();
                            $objDOM = new DOMDocument();
                            $objDOM->load($path.$new);
                            $updated $objDOM->getElementsByTagName("ThisRevisionCreated")->item(0)->nodeValue;
                            $driver $objDOM->getElementsByTagName("NewsComponent");

                            $db JFactory::getDbo();
                            $query $db->getQuery(true);
                            //$query->select('*')
                            //->from($db->quoteName('#__content'))
                            //->where($db->quoteName('metadesc').' = '.$db->quote($updated).' AND '.$db->quoteName('state').' > -1');

                            $query 'SELECT *'.' FROM '.$db->quoteName('#__content').' WHERE '.$db->quoteName('metadesc').' = '.$db->quote($updated).' AND '.$db->quoteName('state').' >-1';

                            $db->setQuery($query);
                            $upd $db->loadAssocList();


                            if(empty(
                            $upd)){
                                
                            $titulos $objDOM->getElementsByTagName("HeadLine");
                                
                            $cx=-1;
                                
                            $k=0;
                                
                            $z=-1;
                                
                            $y=0;
                                foreach(
                            $titulos as $valor){
                                    
                            $z++;
                                    
                            $titu $titulos->item($z)->nodeValue;

                                    
                            $query 'SELECT *'.' FROM '.$db->quoteName('#__content').' WHERE '.$db->quoteName('title').' = '.$db->quote($titu).' AND '.$db->quoteName('state').' >-1';
                                    
                            $db->setQuery($query);
                                    
                            $upd $db->loadAssocList();
                                    if(!empty(
                            $upd)){
                                    
                            //hay q hacer update
                                        //echo 'Actualisé ->'. $titu .'<br>';
                                        
                            $id $upd[0]['id'];
                                        
                            getIndexXml($driver,$updated,$path,$z,2,$id$id_cat);
                                    }else{
                                    
                            //hay q agregar
                                        //echo 'Agrégé ->'. $titu .'<br>';
                                        
                            getIndexXml($driver,$updated,$path,$z,1,0$id_cat);
                                    }
                                }
                                
                            //echo "Mises a jour";
                            }else{
                                
                            //echo 'Categorie a jour';

                            J'ai aussi corrigé plus haut dans le code (et à différents endroits avec des variables $datenow :
                            Code PHP:
                            'created' => $datenow->toMysql(), 
                            en
                            Code PHP:
                            'created' => $datenow->Format$dateFormat ), 
                            Je n'ai plus de message d'erreur, et j'attends le prochain fichier xml déposé sur le serveur automatiquement pour voir si le module fait son boulot!

                            Commentaire


                            • #15
                              Attention, dans Joomla! 3, c'est maintenant $datenow->format($dateFormat) (avec un 'f' minuscule). L'ancien code était 'toFormat'.
                              Tous les services pour les sites Joomla! : sécurité, nettoyage de sites piratés, hébergement, SEO, applications Fabrik, migration, compatibilité mobiles, accessibilité, ...
                              Administrateur certifié Joomla! 3
                              https://www.betterweb.fr

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X