web-dev-qa-db-fra.com

Ajouter un fichier ajax dans le module personnalisé Joomla

Je fais un module où j'ai 2 listes déroulantes. Dans la première liste, il y a des marques de voitures (comme BMW, Audi, Seat, etc.). Lorsque l'utilisateur sélectionne une marque, la deuxième liste doit être remplie avec les différents modèles de cette marque (Seat ibiza, Seat Leon si vous choisissez Seat). J'ai donc besoin d'ajouter un peu d'ajax. Je n’avais jamais utilisé ajax auparavant, alors après quelques lectures, j’ai fait ceci:

<script>
function showUser(str) {
var xmlhttp;


        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById("txtHint").innerHTML = xmlhttp.responseText;
            }
        }

        xmlhttp.open("GET","query.php?q="+str,true);
        xmlhttp.send();

}
</script>

query.php est un fichier situé dans le dossier tmpl (où se trouve le fichier d'affichage par défaut). Cela fonctionnerait normalement si je n'utilisais pas Joomla, mais comme je l'ai découvert, il existe différentes manières d'ajouter Ajax sur Joomla.La plupart des gars ont suggéré de créer un composant et de l'ajouter via view file.Aussi, comme je l'ai vu tout le monde utiliser jquery ajax.Im forcé d'utiliser ça? J'ai essayé d'étudier un peu cette technique mais je me suis perdu. Quelqu'un pourrait-il expliquer quel devrait être le moyen le plus simple d’ajouter Ajax dans le module? (Je n’ai pas très bien compris la façon dont les fichiers sont affichés) Et si c’est obligatoire pour Jquery Ajax, aidez-moi à préparer l’appel?

J'ai fait quelque chose comme ça, ne sais pas si je suis complètement à l'écart:

<script>
$(document).ready(function() {
 $('#cats').change(function() {
  var myReq = new Request({
   method: 'get',
   url: 'modules/mod_dtm_cart/tmpl/query.php'
   //More code here
 });
 });
 });
</script>

Code entier: http://Pastebin.com/dAGQHJun Atm, il n'appelle pas le fichier query.php et la deuxième liste est remplie avec exactement les mêmes éléments que list1.

1
IseNgaRt

Au cas où vous ne voudriez pas utiliser Joomla Ajax Interface, vous pouvez aussi le faire comme ceci:

Vous avez un module et vous avez votre composant. Le code de script est placé dans un fichier javascript ou dans la vue du module (pour qu’il soit appelé par le module).

Ensuite, vous construisez votre composant. Votre composant doit seulement être installable, il n'a pas besoin de vues sophistiquées ni quoi que ce soit. Le fichier important est le contrôleur de composant (controller.php). C’est là que vous pouvez placer votre requête de base de données ou tout simplement créer ce que vous voulez afficher. Une méthode simple consiste à utiliser une méthode de contrôleur comme celle-ci:

function my Query(){
   // do something  - e.g. just create HTML output like this:
   $myVariableFromTheDropdownBox = $_GET['variablename']; // or use the JRequest/JInput methods
   $output = "<p>my text or whatever ".$myVariableFromTheDropdownBox."</p>";
   echo $output;
}

Pour diriger votre code AJAX vers cette méthode, ajustez simplement cette ligne

  xmlhttp.open("GET","query.php?q="+str,true);
  // or this one if you use jQuery
  url: 'modules/mod_dtm_cart/tmpl/query.php'

être

  xmlhttp.open("GET","option=com_yourcomponent&task=myQuery&q="+str,true);
  // or this one if you use jQuery
  url: 'option=com_yourcomponent&task=myQuery'

La sortie doit être contenue dans le responseText que vous avez déjà inclus dans votre xmlhttp.onreadystatechange = function() {. Si vous utilisez jQuery, les données ne seront pas concaténées directement à l’URL mais placées dans une donnée distincte: la ligne 'valeur', pourrait également être un tableau. Faites moi savoir si vous avez besoin d'une aide supplémentaire.

Faites attention si vous utilisez GET ou POST - Les variables GET seront visibles dans votre URL, POST n'y apparaîtra pas. Pensez également à examiner JInput ( JRequest pour les anciennes versions de Joomla!) Au lieu d’utiliser $_POST/$_GET.

S'amuser :-)

edit: Si vous souhaitez utiliser l’alternative com_ajax, essayez-la comme suit:

  • placez votre fonction (à déclencher par la requête AJAX)) dans le fichier helper.php de votre module. Appelez-la myQueryAjax() au lieu de myQuery().
  • l'URL de votre demande AJAX sera désormais ?option=com_ajax&module=yourmodule&format=raw&method=myQuery
  • notez que module = votremodule n'inclut PAS 'mod_' et method = myQuery n'inclut pas 'Ajax'.
4
elk

Je pense que la meilleure option ici est d'utiliser Interface Joomla Ajax

Un composant fin et extensible servant de point d'entrée pour les demandes HTTP de modules et de plug-ins autonomes, permettant ainsi de bénéficier du potentiel de la fonctionnalité Ajax. Com_ajax est généralement utilisé lorsque vous n'êtes pas le développeur du composant avec lequel le module ou le plug-in interagit.

Hello Ajax World Module est un exemple de mise en oeuvre.

3
Dmitry Rekun