it-swarm-es.tech

Agregar ajax en el módulo personalizado de Joomla

Estoy haciendo un módulo donde tengo 2 listas desplegables. En la primera lista hay marcas de automóviles (como BMW, Audi, Seat, etc.). Cuando el usuario selecciona una Marca, la Segunda Lista debe llenarse con los diferentes Modelos de esa Marca (Seat ibiza, Seat Leon si elige Seat). Entonces necesito agregar algo de ajax. Nunca usé ajax antes, así que después de leer un poco los últimos días hice esto:

<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 es un archivo ubicado en la carpeta tmpl (donde se encuentra el archivo de vista predeterminada). Esto normalmente funcionaría si no usara Joomla, pero como descubrí, hay diferentes maneras de agregar Ajax en Joomla. La mayoría de los chicos sugirieron crear un componente y agregarlo a través del archivo de vista. También como vi a todos usar jquery ajax. obligado a usar eso? Traté de estudiar un poco esa técnica pero me perdí. ¿Alguien podría explicar cuál debería ser la forma más fácil de agregar Ajax en el módulo? (No entendí muy claramente esa forma de ver los componentes) Y si es obligatorio para Jquery Ajax, ¿me ayudaría a preparar la llamada?

Hice algo como esto, no sé si estoy completamente fuera del camino:

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

Código completo: http://Pastebin.com/dAGQHJun Cajero automático no llama al archivo query.php y la segunda lista está llena de exactamente los mismos elementos que list1.

1
IseNgaRt

Bueno, en caso de que no desee utilizar la interfaz Joomla Ajax, también puede hacerlo así:

Tienes un módulo y tienes tu componente. El código del script entra en un archivo javascript o en la vista del módulo (para que el módulo lo invoque).

Luego construyes tu Componente. Su componente solo necesita ser instalable, no necesita vistas sofisticadas ni nada. El archivo importante es el controlador del componente (controller.php). Aquí es donde puede poner su consulta de base de datos o simplemente construir lo que quiera mostrar. Una manera fácil es tener un método de controlador como este:

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;
}

Para dirigir su código AJAX) a este método, simplemente ajuste esta línea

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

ser

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

El resultado debe estar contenido en el texto de respuesta que ya incluyó en su xmlhttp.onreadystatechange = function() {. Si usa jQuery, los datos no se concatenarán directamente a la url, sino que se colocarán en una información separada: la línea 'value', también podría ser una matriz. Avísame si necesitas más asistencia.

Tenga cuidado si usa GET o POST - Las variables GET serán visibles en su URL, POST no aparecerá allí. También considere buscar en JInput ( JRequest para versiones anteriores de Joomla!) En lugar de usar $_POST/$_GET.

Que te diviertas :-)

editar: si quieres intentar usar la alternativa com_ajax, inténtalo así:

  • coloque su función (que se activará mediante la solicitud AJAX) en el helper.php de su módulo. Llámelo myQueryAjax() en lugar de myQuery().
  • la URL de su solicitud AJAX ahora será ?option=com_ajax&module=yourmodule&format=raw&method=myQuery
  • tenga en cuenta que module = yourmodule NO incluye 'mod_', y method = myQuery NO incluye 'Ajax'.
4
elk

Creo que la mejor opción aquí es usar Interfaz Joomla Ajax

Un componente delgado y extensible para actuar como un punto de entrada para las solicitudes HTTP de módulos y complementos independientes, lo que permite el potencial de la funcionalidad de Ajax en ellos. Com_ajax se usa generalmente cuando no es el desarrollador del componente con el que está interactuando el módulo o complemento.

Hello Ajax World Module es un ejemplo de implementación.

3
Dmitry Rekun