Joomladay francophone 2019 à Paris, les 8 et 9 mars 2019

Mise à jour d'un module Joomla 2.5 vers 3.x (problème version PHP)

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

  • [RÉGLÉ] Mise à jour d'un module Joomla 2.5 vers 3.x (problème version PHP)

    Bonjour à tous.
    Je possède un site internet basé sur Joomla. A l'origine, celui-ci à été créé sur Joomla 2.5. J'ai réussi à le migrer vers la dernière version en date (3.9.2). J'ai fait cette opération moi-même car le prestataire qui me l'a réalisé il y à 5 ans ne travail plus avec ce CMS et n'a pas voulu réaliser la migration (trop compliqué paraît-il).
    Je suis content car le site fonctionne parfaitement, j'ai pu passer en PHP7, activer le certificat SSL...etc. Du coup j'ai un site qui tourne bien.... A l'exception d'un module qui me fait planter tout le site s'il est actif.

    Ce module à été écrit par cet ancien prestataire et ne bénéficie donc pas de mise à jour. C'est un petit script qui s'appelle "a voir aussi" et qui affiche sur la droite de la page les produits de la même catégorie que la page visité.

    Visiblement, ce qui fait planter le module est la version PHP. L'erreur obtenue est :

    Code:
    Warning: Use of undefined constant DS - assumed 'DS' (this will throw an Error in a future version of PHP) in /home/handifleao/www/securacces/modules/mod_voiraussi/mod_voiraussi.php on line 11
    
    Warning: require_once(/home/handifleao/www/securacces/modules/mod_voiraussiDShelper.php): failed to open stream: No such file or directory in /home/handifleao/www/securacces/modules/mod_voiraussi/mod_voiraussi.php on line 11
    
    Fatal error: require_once(): Failed opening required '/home/handifleao/www/securacces/modules/mod_voiraussiDShelper.php' (include_path='.:/usr/local/php7.3/lib/php') in /home/handifleao/www/securacces/modules/mod_voiraussi/mod_voiraussi.php on line 11
    Peut-être que quelqu'un d'entre vous aurait la solution pour m'aider à résoudre ce problème ?

    Je joins à ce post le module zippé....

    D'avance un grand merci !
    Fichiers joints
    Dernière édition par Scuba070 à 03/02/2019, 10h39

  • #2
    Bonjour,

    En fait, "DS" correspond au séparateur "/" dans les chemins.
    Il faut soit le remplacer partout dans le code, soit voir si sa définition au début du fichier principal est bien prise en compte.
    define('DS', DIRECTORY_SEPARATOR);
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide). MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info hébergés chez PHPNET - +sites gérés chez 1and1 et OVH - Site pro : www.robertg-conseil.fr

    Commentaire


    • #3
      J'ai oublié de préciser une chose importante.

      J'ai tenté diverses solutions trouvé ici et , sans succès car cela me donne une autre erreur une fois en place:
      Code:
      0 - Using $this when not in object context

      Commentaire


      • #4
        Envoyé par RobertG Voir le message
        Bonjour,

        En fait, "DS" correspond au séparateur "/" dans les chemins.
        Il faut soit le remplacer partout dans le code, soit voir si sa définition au début du fichier principal est bien prise en compte.
        Merci Robert G

        Merci pour votre réponse. Je viens de comparer mon fichier PHP avec celui d'un autre module et j'ai compris ce que vous avez écrit.

        Ainsi j'ai transformé
        Code:
        require_once( dirname(__FILE__).DS.'helper.php' );
        en
        Code:
        require_once dirname(__FILE__) . '/helper.php';
        Je n'ai plus l'erreur "undefined constant DS" mais du coup je retrouve ma deuxième erreur

        Code:
        0 - Using $this when not in object context
        Mais cette fois je n'ai aucune idée de comment m'en sortir...

        Commentaire


        • #5
          En activant le rapport d'erreur sur déceloppement, j'arrive à en savoir un peu plus :

          Code:
          Using $this when not in object context
          /home/handifleao/www/securacces/libraries/src/Application/CMSApplication.php:370 
          Call stack
          # Function Location
          1 () JROOT/libraries/src/Application/CMSApplication.php:370
          2 Joomla\CMS\Application\CMSApplication::getMenu() JROOT/libraries/src/Application/SiteApplication.php:275
          3 Joomla\CMS\Application\SiteApplication::getMenu() JROOT/modules/mod_voiraussi/tmpl/default.php:10
          4 require() JROOT/modules/mod_voiraussi/mod_voiraussi.php:9
          5 include() JROOT/libraries/src/Helper/ModuleHelper.php:200
          6 Joomla\CMS\Helper\ModuleHelper::renderModule() JROOT/libraries/src/Document/Renderer/Html/ModuleRenderer.php:98
          7 Joomla\CMS\Document\Renderer\Html\ModuleRenderer->render() JROOT/libraries/src/Document/Renderer/Html/ModulesRenderer.php:47
          8 Joomla\CMS\Document\Renderer\Html\ModulesRenderer->render() JROOT/libraries/src/Document/HtmlDocument.php:491
          9 Joomla\CMS\Document\HtmlDocument->getBuffer() JROOT/libraries/src/Document/HtmlDocument.php:783
          10 Joomla\CMS\Document\HtmlDocument->_renderTemplate() JROOT/libraries/src/Document/HtmlDocument.php:557
          11 Joomla\CMS\Document\HtmlDocument->render() JROOT/libraries/src/Application/CMSApplication.php:1044
          12 Joomla\CMS\Application\CMSApplication->render() JROOT/libraries/src/Application/SiteApplication.php:778
          13 Joomla\CMS\Application\SiteApplication->render() JROOT/libraries/src/Application/CMSApplication.php:202
          14 Joomla\CMS\Application\CMSApplication->execute() JROOT/index.php:49
          J'ai donc ouvert le fichier CMSapplication et voici le code de la ligne 370 :

          Code:
              public function getMenu($name = null, $options = array())
              {
                  if (!isset($name))
                  {
                      $name = $this->getName();
                  }
          
                  // Inject this application object into the \JMenu tree if one isn't already specified
                  if (!isset($options['app']))
                  {
                      $options['app'] = $this; la ligne 370 est ici
                  }
          
                  try
                  {
                      $menu = \JMenu::getInstance($name, $options);
                  }
                  catch (\Exception $e)
                  {
                      return;
                  }
          
                  return $menu;
              }
          Que dois-je modifier ici et comment ?

          D'avance, merci

          Commentaire


          • #6
            Bon je continue seul à essayer de solutionner mon problème. J'écris ici toutes mes avancées, peut-être que cela servira à quelqu'un un jour...

            J'ai résolu -en partie- l'erreur
            0 - Using $this when not in object context
            En cherchant un peu sur les forum, la ligne suivante était incorrecte :

            Code:
            $parentItemid = JSite::getMenu()->getActive()->parent_id;
            Voici la correction :
            Code:
            $parentItemid = JFactory::getApplication()->getMenu()->getActive()->parent_id;
            Désormais, le site ne plante plus, mais j'ai encore une erreur :
            Code:
            Notice: Undefined index: Itemid in /home/handifleao/www/securacces/modules/mod_voiraussi/tmpl/default.php on line 22
            Voici le code incluant la ligne 22 :

            Code:
            //Obtain a database connection
            $db = JFactory::getDbo();
            //Retrieve the shout                    
            $query = $db->getQuery(true)
                        ->select('m.id as itemId')
                        ->from('#__menu as m')
                        ->where('m.parent_id =' . (int)$parentItemid . ' AND m.id !=' . (int)$_GET['Itemid']) la ligne 22 est ici
                        ->order('m.lft ASC');
            Une idée de comment corriger ce problème ?



            Commentaire


            • #7
              J'ai peut être une question bête.... Mais je vois à des endroits Itemid, à d'autres itemId, ou encore ItemId.

              La casse est-elle importante ?

              Commentaire


              • #8
                Bonjour,

                Votre problème vient bien du module "voiraussi" qui est soit "pas à jour", soit incompatible avec la version actuelle Joomla, donc, désactivez le.

                Si vous souhaitez que l'on vous aide, merci de copier le contenu du module.

                Pascal

                PS: ne touchez pas au fichier CMSapplication qui est un fichier standard Joomla pour corriger un problème dans un autre module
                Dernière édition par pmleconte à 02/02/2019, 15h41
                Le JoomlaDay 2019 aura lieu le 8 et 9 mars à Paris... J'y serai et vous ?

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

                Commentaire


                • #9
                  Votre ItemId vient certainement d'un formulaire de votre module. Regardez si vous ne trouvez pas cela dans le fichier xml du module.

                  Pascal
                  Le JoomlaDay 2019 aura lieu le 8 et 9 mars à Paris... J'y serai et vous ?

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

                  Commentaire


                  • #10
                    Oups! , je viens de voir que vous aviez mis le zip du module.

                    Je regarde si je vois quelque chose.

                    Pascal
                    Le JoomlaDay 2019 aura lieu le 8 et 9 mars à Paris... J'y serai et vous ?

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

                    Commentaire


                    • #11
                      Pas terrible sa programmation: il charge $list dans le helper (youpi) puis il a oublié un truc (le menu associé à l'article), donc il l'ajoute dans le default.php.

                      Je pense que cette syntaxe est incorrecte, mais essayez déjà de remplacer (int)$_GET['Itemid'] par JRequest::getInt('id') dans default.php, mais je ne suis pas sûr que cela fonctionne.

                      Autre solution : retirez .'&Itemid='.$ArrayItemId[$i]->itemId) en ligne 41 ainsi que la requête sql.

                      Pascal
                      Le JoomlaDay 2019 aura lieu le 8 et 9 mars à Paris... J'y serai et vous ?

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

                      Commentaire


                      • #12
                        J'ai un peu simplifié votre code et on doit pouvoir jouer aussi sur l'ordre d'affichage.

                        Pascal
                        Fichiers joints
                        Le JoomlaDay 2019 aura lieu le 8 et 9 mars à Paris... J'y serai et vous ?

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

                        Commentaire


                        • #13
                          J'ai ajouté le choix de l'ordre d'affichage dans les paramètres du module (ainsi que le filtrage par langue dans le helper.php).

                          Pascal
                          Fichiers joints
                          woluweb likes this.
                          Le JoomlaDay 2019 aura lieu le 8 et 9 mars à Paris... J'y serai et vous ?

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

                          Commentaire


                          • #14
                            Envoyé par pmleconte Voir le message
                            Pas terrible sa programmation: il charge $list dans le helper (youpi) puis il a oublié un truc (le menu associé à l'article), donc il l'ajoute dans le default.php.

                            Je pense que cette syntaxe est incorrecte, mais essayez déjà de remplacer (int)$_GET['Itemid'] par JRequest::getInt('id') dans default.php, mais je ne suis pas sûr que cela fonctionne.

                            Autre solution : retirez .'&Itemid='.$ArrayItemId[$i]->itemId) en ligne 41 ainsi que la requête sql.

                            Pascal
                            Bonsoir Pascal.

                            Un immense merci car vos modifs ont permis de corriger les erreurs de liens ! Un grand pas de fait....

                            Seulement, il manque maintenant les images au dessus des articles proposés.

                            Pour info, avant votre modif, j'avais bien les images correctes sur chaque article, mais les liens n'était pas bon.

                            Désormais, c'est l'inverse....

                            Si vous voulez je peux en MP vous envoyer le lien du site pour voir le problème en direct...

                            En tout cas merci de m'aider !!

                            Commentaire


                            • #15
                              Bonjour,

                              J'avais effectivement un bug (oubli impardonnable d'un ".....).

                              Ci-joint la version corrigée.

                              Pascal

                              Fichiers joints
                              Le JoomlaDay 2019 aura lieu le 8 et 9 mars à Paris... J'y serai et vous ?

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

                              Commentaire

                              Annonce

                              Réduire
                              1 sur 2 < >

                              C'est [Réglé] et on n'en parle plus ?

                              A quoi ça sert ?
                              La mention [Réglé] permet aux visiteurs d'identifier rapidement les messages qui ont trouvé une solution.

                              Merci donc d'utiliser cette fonctionnalité afin de faciliter la navigation et la recherche d'informations de tous sur le forum.

                              Si vous deviez oublier de porter cette mention, nous nous permettrons de le faire à votre place... mais seulement une fois
                              Comment ajouter la mention [Réglé] à votre discussion ?
                              1 - Aller sur votre discussion et éditer votre premier message :


                              2 - Cliquer sur la liste déroulante Préfixe.

                              3 - Choisir le préfixe [Réglé].


                              4 - Et voilà… votre discussion est désormais identifiée comme réglée.

                              2 sur 2 < >

                              Assistance au forum - Outil de publication d'infos de votre site

                              Compatibilité: PHP 4.1,PHP4, 5, 6DEV MySQL 3.2 - 5.5 MySQLi from 4.1 ( @ >=PHP 4.4.9)

                              Support Version de Joomla! : | J!3.0 | J!2.5.xx | J!1.7.xx | J!1.6.xx | J1.5.xx | J!1.0.xx |

                              Version française (FR) D'autres versions sont disponibles depuis la version originale de FPA

                              UTILISER À VOS PROPRES RISQUES :
                              L'exactitude et l'exhaustivité de ce script ainsi que la documentation ne sont pas garanties et aucune responsabilité ne sera acceptée pour tout dommage, questions ou confusion provoquée par l'utilisation de ce script.

                              Problèmes connus :
                              FPA n'est actuellement pas compatible avec des sites Joomla qui ont eu leur fichier configuration.php déplacé en dehors du répertoire public_html.

                              Installation :

                              1. Téléchargez l'archive souhaitée : http://afuj.github.io/FPA/

                              Archive zip : https://github.com/AFUJ/FPA/zipball/master

                              2. Décompressez le fichier de package téléchargé sur votre propre ordinateur (à l'aide de WinZip ou d'un outil de décompression natif).

                              3. Lisez le fichier LISEZMOI inclus pour toutes les notes de versions spécifiques.

                              4. LIRE le fichier de documentation inclus pour obtenir des instructions d'utilisation détaillées.

                              5. Téléchargez le script fpa-fr.php à la racine de votre site Joomla!. C'est l'endroit que vous avez installé Joomla et ce n'est pas la racine principale de votre serveur. Voir les exemples ci-dessous.

                              6. Exécutez le script via votre navigateur en tapant: http:// www. votresite .com/ fpa-fr.php
                              et remplacer www. votresite .com par votre nom de domaine


                              Exemples:
                              Joomla! est installé dans votre répertoire web et vous avez installé la version française du fichier FPA:
                              Télécharger le script fpa-fr.php dans: /public_html/
                              Pour executer le script: http://www..com/fpa-fr.php

                              Joomla! est installé dans un sous-répertoire nommé "cms" et vous avez installé la version française du fichier FPA:
                              Télécharger le script fpa-fr.php dans: /public_html/cms/
                              Pour executer le script: http://www..com/cms/fpa-fr.php

                              En raison de la nature très sensible de l'information affichée par le script FPA, il doit être retiré immédiatement du serveur après son utilisation.

                              Pour supprimer le script de votre site, utilisez le lien de script de suppression fourni en haut de la page du script. Si le lien de suppression échoue pour supprimer le script, utilisez votre programme FTP pour le supprimer manuellement ou changer le nom une fois que le script a généré les données du site et le message publié sur le forum. Si le script est toujours présent sur le site, il peut être utilisé pour recueillir suffisamment d'informations pour pirater votre site. Le retrait du script empêche des étrangers de l'utiliser pour jeter un oeil à la façon dont votre site est structuré et de détecter les défauts qui peuvent être utilisé à vos dépends.
                              Voir plus
                              Voir moins

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X