Joaktree pour J4/5, voire 6 ! à venir ?

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

  • Joaktree pour J4/5, voire 6 ! à venir ?

    Bonjour,

    Patience et longueur de temps... Tenace et faute de codeur disponible pour faire évoluer cette extension, je me suis remis à ma tentative de rendre Joaktree compatible J4 et J5, en attendant un éventuel successeur à ce composant.
    Et je viens ici en espérant, d'une part grâce à votre aide, d'autre part grâce à la description de mes blocages qui parfois me fait trouver la solution, de continuer à progresser.

    Dans la version 2 actuelle, testée sur un site Joomla! 5 (migré depuis J3 avec les données Joaktree d'un site de démo personnel utilisant des exemples provenant du logiciel Heredis que j'utilise depuis de très nombreuses années), j'ai déjà bien avancé, mais je ne suis pas au bout de mes peines. Le site fonctionne sous PHP 8.1, débogage activé, rapport d'erreurs au maximum, plugin de compatibilité désactivé.

    Par exemple, beaucoup de liens affichés sur le site sont gérés par JS et je n'arrive pas à comprendre l'absence de réaction par exemple des liens de type index alphabétique, sélection qui devrait afficher les lieux correspondant à la plage de lettres
    Cliquez sur l'image pour l'afficher en taille normale  Nom : image.png  Affichages : 0  Taille : 8,1 Ko  ID : 2063285
    ou des noms de lieux qui devraient ouvrir au-dessus de la liste de ceux-ci une carte correspondant au lieu (je n'ai pas pu déterminer pour le moment si c'est le clic qui est inefficace (hypothèse la plus vraisemblable) ou l'affichage qui est bloqué
    Cliquez sur l'image pour l'afficher en taille normale  Nom : image.png  Affichages : 0  Taille : 4,4 Ko  ID : 2063286
    Même souci sur l'index des noms d'individus au niveau de l'index alphabétique, mais contrairement aux lieux, le clic sur les items ouvre la liste des individus de même nom, ce qui permet d'accéder à la fiche individuelle.
    Sur d'autres pages, le JS semble fonctionner.
    window.addEventListener avait provoqué des erreurs, elles ont disparu. getElementById semblait poser aussi problème mais je ne sais pas si ça peut encore être en cause, certaines pages dont le fichier de vue possède ce code fonctionnent bien.

    Pour le moment donc, la liste d'individus, avec ses fonctions de filtre et de suppression de celui-ci, ne semble pas poser de problème. L'index des individus et la liste des lieux ont les problèmes précités, les fiches des individus sont correctes sauf l'absence d'affichage des images associées et de la carte interactive qui se voient en version J3.
    Seules les cartes Google fonctionnent (c'est déjà le cas en J3), mais en statique, un message d'erreur de type warning s'affiche, dont je n'ai pour le moment pas pu interpréter le contenu.
    Pas d'erreur pour les dépôts (vides sur ce site) ni pour les sources.
    Les modules toomanyyearsago, derniers individus vus et date de dernière modification fonctionnent.
    Les plugins sont a priori corrigés, mais le plugin de recherche utilise l'ancienne fonction, pas la recherche avancée, à voir donc.

    A ces restrictions près, la version 2 est très proche de permettre un accès frontal par migration d'un site géré actuellement par Joomla! 3.
    Il reste en revanche des blocages plus gênants dans l'administration, mais je garde confiance !

    Merci de vos conseils !
    "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

  • #2
    En fait si, j'ai toujours le message JS dans la console
    getElementById is not a function
    Idem si j'utilise getElement, et je ne trouve pas comment corriger.

    Y a-t-il quelque chose d'incorrect dans cette première ligne de fonction JS ?
    Code:
    function loadData() {
    const jtElement = $('jt-accordion').getElementById('div.jt-ajax');
    if ((jtElement) && (jtElement.hasClass('jt-ajax'))) {
    jtElement.removeClass('jt-ajax');
    var index = jtElement.id;
    var myRequest = new Request({
    url: 'index.php?option=com_joaktree&format=raw&tmpl=component&view=locations&layout=_places&treeId=7&filter='+index.replace('-jt-cnt', ''),
    method: 'get',
    onFailure: function(xhr) {
    alert('Error occured for url: ' + url);
    },
    onComplete: function(response) {
    HandleResponseLoc(index, response);
    }
    }).send();
    }
    }​​
    Dernière édition par RobertG à 23/07/2024, 15h39
    "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

    Commentaire


    • #3
      Lorsque je compare le code de la page avec celui de la version J3, avec les outils de développement Web de Firefox, la mention "event" visible dans J3 sur les listes alphabétiques n'apparaît pas sous J5
      Cliquez sur l'image pour l'afficher en taille normale

Nom : image.png 
Affichages : 118 
Taille : 12,4 Ko 
ID : 2063296
      En revanche, pour la liste des lieux, comme en J3 "event" est bien présent en J5 avec une adresse pleinement fonctionnelle
      Code:
      function onclick(event) {
        jt_show_map('Annonay,07100,Ardèche,Rhône-Alpes,FRANCE,', 'index.php?option=com_joaktree&view=interactivemap&tmpl=component&format=raw&treeId=7&locId=2573');
      }​
      C'est donc bien le clic qui n'est pas reconnu. Que faire ?
      "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

      Commentaire


      • #4
        Autre question : dans les fichiers d'administration du composant, j'ai de nombreux
        Code:
        onclick="document.id('search1').value='';this.form.submit();">
        et la console me signale
        Uncaught TypeError: document.id is not a function
        Il s'agit d'effacer le contenu du champ search1 qui a été préalablement rempli par l'utilisateur, puis de rafraîchir la requête et réafficher la liste
        Par quoi remplacer "document.id" ?

        Ce problème-ci est réglé en remplaçant id par getElementById !
        Dernière édition par RobertG à 23/07/2024, 17h12
        "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

        Commentaire


        • #5
          Bonjour Robert

          Juste pour ne pas te laisser tout seul sur ce fil :-)

          Les problèmes que tu rencontres ici semblent être liés à un saut de version de jquery...

          Du coup, non seulement tu as Joomla qui a changé de version mais aussi PHP et jquery et, tant qu'à faire, aussi le framework CSS (bootstrap).

          Beaucoup de pistes pour expliquer pourquoi c'est si difficile...
          Christophe (cavo789)
          Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
          Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

          Commentaire


          • #6
            Merci Christophe !
            "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

            Commentaire


            • #7
              Bonjour,

              Pour ce qui est des erreurs liées à PHP, a priori, elles ne sont pas très difficiles à régler dans l'ensemble.
              C'est surtout ce qui concerne le JavaScript qui est un obstacle pour moi.

              Mais surtout, le plus difficile est de ne pas arriver à comprendre "pourquoi" et donc de ne pas pouvoir corriger, lorsque du code apparemment en cause ne pose aucun problème dans d'autres fichiers où il est identique.
              Ou quand pour une erreur
              0 Using $this when not in object context ;
              qui semble correspondre à une déclaration static de fonction, la fonction qui semble appelée dans la ligne de code citée est introuvable...
              "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

              Commentaire


              • #8
                Je passe à une autre erreur, ici pour la création d'une nouvelle carte qui échoue (la modification réussit) avec ce message du composant lui-même
                Erreur: Aucune donnée n'a été sauvegardée
                puis réouverture de la page de création de carte.

                La ligne en cause est
                Code PHP:
                $ret parent::save($form); 
                $form n'est pas vide, mais $ret renvoie false (true en cas de modification).
                Nous sommes dans la "function save($form)" qui est dans une classe étendant AdminModel.
                Dans la function save($data) du fichier libraries/src/MVC/Model/AdminModel.php du noyau, $data est bien récupéré.
                Ensuite, l'erreur se produit sur "check" que je ne sais pas où chercher !
                Code PHP:
                            // Prepare the row for saving
                            
                $this->prepareTable($table);
                            
                // Check the data.
                            
                if (!$table->check()) {
                                
                $this->setError($table->getError());

                                return 
                false;
                            }
                ​ 
                Il y a une flopée de "function check()", comment trouver la bonne ?
                Dernière édition par RobertG à 26/07/2024, 17h18
                "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                Commentaire


                • #9
                  Je n'arrive toujours pas à comprendre la raison de ce getElementById() is not a function ! (message 2)

                  Si je remplace $('jt-accordion') par document, l'erreur disparaît, mais le clic sur les liens ne fonctionne toujours pas
                  Dernière édition par RobertG à 26/07/2024, 18h17
                  "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                  Commentaire


                  • #10
                    Je tourne en rond...

                    Joaktree utilise par exemple
                    Code:
                    <script type="text/javascript">
                        Joomla.submitbutton = function(task)
                        {
                            if (task == 'application.cancel' || document.formvalidator.isValid(document.GetElementById("application-form"))) {
                                alert('<?php echo $this->escape('Cancel');?>');
                                Joomla.submitform(task, document.getElementById("application-form"));
                            } else {
                                alert('<?php echo $this->escape(Text::_('JGLOBAL_VALIDATION_FORM_FAILED'));?>');
                            }
                        }
                    </script>​
                    Dans le cadre de la création d'un nouvel élément, l'annulation quitte bien la page sans erreur, mais l'enregistrement renvoie l'erreur
                    Uncaught TypeError: document.id is not a function
                    Pourtant, c'est ce même script qui déclenche la fermeture de la page, puisque j'ai bien l'alerte JS "Cancel".
                    Qu'est-ce qui peut expliquer cette différence ?
                    "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                    Commentaire


                    • #11
                      Une erreur corrigée : pour l'affichage de l'image et la carte dans la fiche d'individu, c'était une (ancienne ?) erreur de typo : $this->html au lieu de $this->Html

                      Côté site, en dehors des ajouts et modifications pour les administrateurs, clics inactifs pour l'instant, il ne reste que l'absence de fonctionnement du clic sur les listes alphabétiques (avec l'erreur getElementById), et après clic sur le nom de lieu, un message
                      Uncaught ReferenceError: Cookie is not defined
                      correspondant à un script ajouté par le fichier de vue.
                      ET comme je l'i dit, le JavaScript et moi...
                      "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                      Commentaire


                      • #12
                        Bon, ça se confirme, tout tourne pour ces points sur le code JavaScript injecté dans la page par le fichier de vue, et les autres problèmes frontaux - modification, ajout et suppression) sont aussi gérés par du JavaScript (onclick)...
                        Je suis complètement coincé à ce niveau.
                        "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                        Commentaire


                        • #13
                          A force de recherches, il semble que le script injecté corresponde à du Mootools, avec par exemple "Cookie.write" que je ne retrouve qu'associé à Mootools.
                          Que faire ? Avez-vous de la doc à me conseiller pour tenter de convertir ces scripts vers JQuery ou Bootstrap ?
                          "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                          Commentaire


                          • #14
                            Mootools ? Wow, il est abandonné dans Joomla depuis j2.5 je pense et la dernière activité sur le repo de ce framework date de 2016...

                            Perso je n'ai jamais lu d'articles concernant une migration possible : faut récrire le code.
                            Christophe (cavo789)
                            Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                            Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                            Commentaire


                            • #15
                              Eh oui, et ce qui est étonnant, c'est que ce code fonctionne, a priori sans Mootools donc, sur la version 3 de Joomla! mais plus en J4 pour certaines pages quand sur d'autres, il semble que l'affichage et les fonctions sont identiques à ce que j'ai sous J3.

                              Et hélas, je ne vois pas comment réécrire ce code, avec ma méconnaissance de JS, sans compter que même si j'arrive plus ou moins à savoir quelle utilité a telle ou telle fonction JS, ça ne m'avance pas plus.

                              Et tout ce qui fonctionne en PHP 8.1 fonctionne jusqu'en PHP 8.3

                              En revanche, testé sur Joomla! 6 alpha1, si l'accès à l'administration semble comparable, même en 8.1, les pages frontales sont en 404 à cause d'une classe Cookie qui n'existerait plus en J6, la désactivation des cookies dans l'extension remettant les choses à la normale. .
                              Dernière édition par RobertG à 30/07/2024, 11h51
                              "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 - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X