Inclure de l'ajax dans un module

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

  • [RÉGLÉ] Inclure de l'ajax dans un module

    Bonjour,

    cela fait maintenant des semaines que je parcours le web et les multiples tutos et posts sur le sujet, mais malheureusement, je n'arrive pas à faire fonctionner ma requête ajax dans mon module.

    J'ai créé un module pour un site de vente de pneus. Il va donc récupérer largeur, diamètre, etc.
    Jusque là, j'avais mis un onchange="this.form.submit()" sur chaque champ, ce qui permettait d'actualiser les diamètres disponibles pour la largeur sélectionnée, et ainsi de suite pour chaque dimension.
    Le souci c'est que ce n'est pas propre, en particulier si la personne a une mauvaise connexion et doit attendre entre chaque sélection de dimension.

    J'ai donc tout bêtement :
    mon formulaire dans le mod_module/tmpl/default.php
    la requête php/sql qui actualise les filtres dans le mod_module/ajax.php
    le js dans mod_module/js/fichier.js

    Mon problème se situe dans la liaison entre le js et le fichier ajax.php, je n'arrive pas à construire mon URL, tous ce que j'ai pu trouver sur le web fonctionne avec des composants et non des modules. J'ai bien sur essayé de l'intégrer dans mon composant, mais j'ai le même souci, j'ai essayé chaque tuto que j'ai trouvé.

    Bien sur ca ne me pose pas de problème sortant de la structure joomla MVC, mais pour continuer d'utiliser le framework joomla, je dois réussir de cette facon.

    Si quelqu'un peut m’éclairer svp, ca serait vraiment top, merci d'avance.

    Code:
    $.ajax({
                    type: 'GET',
                    url: 'URL???',
                    data: {
                        keys: keys,
                        keyVal: keyVal
                    },
                    dataType: 'json',
                    success: function (data, statut) {
                        $(".test-key1").html(data.brand)
                        $(".test-key2").html(data.width)              
                    },
                    error: function (resultat, statut, erreur) {
                        console.log('Une erreur est survenue.')
                    }
    
                });
    Dernière édition par Minie à 13/02/2020, 12h31

  • #2
    Bonjour

    Cela fait, ouch!, un très grand nombre d'années que je n'ai plus programmé en Joomla (au moins sept ans au bas mot) donc mes connaissances en la matière sont devenues très faible mais pour ce que tu veux faire, il faut un composant qui va gérer la requête web (=le controlleur). Toutefois, c'était il y a sept ans au moins car depuis, il existe com_ajax qui sert justement à ça.

    As-tu déjà regardé dans cette direction ? Faire une requête sur com_ajax et voir comment ce gentil composant pour faire le lien avec tes scripts PHP; placés au niveau de ton module ?

    Bonne journée.
    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


    • #3
      Bonjour,

      Pour un module, AJAX fonctionne avec le fichier helper.php qui doit contenir une fonction qui doit se terminer par AJAX, par exemple : getAjax().

      Voir https://docs.joomla.org/Using_Joomla_Ajax_Interface et un exemple dans https://github.com/Joomla-Ajax-Inter...Session-Module

      Pascal
      Dernière édition par pmleconte à 13/02/2020, 12h24
      If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

      Commentaire


      • #4
        En complément, au niveau du JS, la requête est du type :

        Code:
                request = {
                    'option' : 'com_ajax',
                    'module' : 'mon_module',
                    'data'   : 'param',
                    'format' : 'raw'
                    };
                    jQuery.ajax({
                        type   : 'POST',
                        data   : request,
                        success: function (response) {
                            options = JSON.parse(response);
                            go_traitement(options);
                            return true;
                        }
                    });
                return false;
        Pascal
        cavo789 aime ceci.
        If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

        Commentaire


        • #5
          [Mode léger]Raaaah, com_ajax, trop fort [/ML]

          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 pour toutes vos réponses, je ne m'attendais pas à un retour si rapide !

            cavo789 : En effet j'ai connaissance du com_ajax, mais j'etais un peu bornée et je voulais intégrer l'ajax dans mon propre module.

            pmleconte : J'avais déjà essayé l'exemple dans github, sans succès pour moi, mais je vais me résigner à suivre le chemin du com_ajax en espérant réussir.

            Merci à vous deux, je vais suivre la piste com_ajax, tant pis pour l'autonomie de mon module, on va voir ce que ca donne.

            Commentaire


            • #7
              J'utilise com_ajax dans tous mes modules avec le JS ci-dessus.

              Face à la requête:
              Code:
               
                   request = {
                              'option' : 'com_ajax',
                              'module' : 'cg_popup',
                              'data'   : 'param',
                              'id'     : myid,
                              'format' : 'raw'
                              };
                              jQuery.ajax({
                                  type   : 'POST',
                                  data   : request,
                                  success: function (response) {
                                      options = JSON.parse(response);
                                      go_popup(myid,options);
                                  }
                              });
              J'ai, au niveau du helper.php, le code suivant qui récupère mon paramètre ID:
              Code PHP:
              // AJAX Request     
                  
              public static function getAjax() {
                      
              $input JFactory::getApplication()->input;
                      
              $id $input->get('id');
                      
              $module self::getModuleById($id);
                      
              $params = new JRegistry($module->params);          
                      
              $output '';
                      if (
              $input->get('data') == "param") {
                          return 
              self::getParams($id,$params);
                      }
                      return 
              false;
                  } 
              Pascal
              If anything can go wrong, it will...If I can help, I will ..https://conseilgouz.com

              Commentaire


              • #8
                Merci beaucoup pour ces précisions, je test de suite

                Commentaire


                • #9
                  Envoyé par Minie Voir le message
                  Merci beaucoup pour ces précisions, je test de suite
                  Tu as écris le mot "résignée" mais non, non, c'est la bonne façon de procéder.

                  Joomla utilise le fichier index.php comme unique point d'entrée et passe la main a un contrôleur dont le rôle est d'exécuter l'action demandée et qui a un contrôleur ? Seul un composant. Ni un module ni un plugin.

                  D'où, pour répondre à ton type de besoin absolument logique, la mise à disposition de com_ajax dans le core de joomla.

                  Pas résignée mais instruite du coup ?

                  Bon dev.
                  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


                  • #10
                    Merci Cavo,

                    instruite ET résignée Je comprends bien le besoin d'un composant pour faire tourner l'ajax de Joomla, mais je souhaitais faire tourner avec mon composant que j'ai développé.

                    Mais merci, j'ai réussi avec le com_ajax de joomla

                    Edit : quelques sources supplémentaires qui m'ont aidées :
                    Ajax makes it possible to create websites that are easier and faster to use. You can use Ajax to refresh a specific section of a page without reloading all the content.  One really common use for Ajax is a search feature. With Ajax, visitors can try multiple different searches without refreshing the page. In t

                    https://forum.alsacreations.com/topi...-par-ajax.html

                    Commentaire

                    Annonce

                    Réduire
                    Aucune annonce pour le moment.

                    Partenaire de l'association

                    Réduire

                    Hébergeur Web PlanetHoster
                    Travaille ...
                    X