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

  • 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

  • Scuba070
    a répondu
    Bonjour Pascal.

    Vous êtes absolument génial, vos modifs ont fonctionnées à merveille !

    Mon module est désormais opérationnel et activé !

    ==>> RESOLU !

    Laisser un commentaire:


  • pmleconte
    a répondu
    Bonjour,

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

    Ci-joint la version corrigée.

    Pascal

    Fichiers joints

    Laisser un commentaire:


  • Scuba070
    a répondu
    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 !!

    Laisser un commentaire:


  • pmleconte
    a répondu
    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

    Laisser un commentaire:


  • pmleconte
    a répondu
    J'ai un peu simplifié votre code et on doit pouvoir jouer aussi sur l'ordre d'affichage.

    Pascal
    Fichiers joints

    Laisser un commentaire:


  • pmleconte
    a répondu
    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

    Laisser un commentaire:


  • pmleconte
    a répondu
    Oups! , je viens de voir que vous aviez mis le zip du module.

    Je regarde si je vois quelque chose.

    Pascal

    Laisser un commentaire:


  • pmleconte
    a répondu
    Votre ItemId vient certainement d'un formulaire de votre module. Regardez si vous ne trouvez pas cela dans le fichier xml du module.

    Pascal

    Laisser un commentaire:


  • pmleconte
    a répondu
    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

    Laisser un commentaire:


  • Scuba070
    a répondu
    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 ?

    Laisser un commentaire:


  • Scuba070
    a répondu
    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 ?



    Laisser un commentaire:


  • Scuba070
    a répondu
    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

    Laisser un commentaire:


  • Scuba070
    a répondu
    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...

    Laisser un commentaire:


  • Scuba070
    a répondu
    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

    Laisser un 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