it-swarm-es.tech

¿Cómo puedo usar com_ajax para cargar y descargar otro módulo (para diseño adaptativo)

Esta es una continuación de la pregunta ¿Cómo se puede deshabilitar un módulo en función del tamaño del dispositivo o de la ventana gráfica en Joomla 3 para optimizar el rendimiento para dispositivos móviles?

¿Cómo puedo usar com_ajax para cargar y descargar un módulo? La llamada se puede hacer usando javascript puro o jquery, y se basará en el tamaño de la ventana gráfica (estamos usando mediacheck.js para eso: https://github.com/sparkbox/mediaCheck ).

Dependiendo de dónde vaya esta respuesta, incluso podemos [hacer que nuestro desarrollador] ponga un componente para permitir este tipo de carga dinámica (elija puntos de interrupción, elija qué módulos cargar/descargar).

Justificación: Responsive/Adaptive (elija su sabor) es esencial hoy en día, y también lo es reducir el tamaño de la carga para dispositivos móviles (velocidad 3G lenta si está en una buena área de recepción, aquí en Brasil). Si puedo usar 10 ~ 15k de jQuery/Javascript para evitar cargar 20 ~ 200k de un módulo (los módulos pueden contener imágenes, entonces, sí, pueden alcanzar un tamaño bastante grande), estoy de acuerdo. La reducción del desorden de la pantalla también es imprescindible en un buen diseño móvil. Incluso podemos argumentar que esto es "móvil primero", porque diseñamos sin el módulo, luego lo cargamos según lo permita el tamaño de la pantalla.

com_ajax solo se usa realmente si los datos para el módulo son compatibles (basados ​​en JSON), aunque tiene otras características. En algunos casos, la forma más fácil de "simplemente" cargar un módulo es crear un nuevo archivo de plantilla. Esto se puede hacer creando algo como "module.php" en el directorio de plantillas. Luego usando algo como esto adentro.

<?php
$jinput = JFactory::getApplication()->input;
$module = $jinput->get('module_pos', 'default_value', 'get');
?>
<jdoc:include type="modules" name="<?php echo $module; ?>"/>

Esto debería cargar solo el módulo en una página, mediante el uso de una URL como index.php?tmpl=module&module_pos=foo En una solicitud ajax, debería poder obtener "solo" los datos del módulo. Esto cargará todos los módulos asignados a la posición denominada module_pos.

Sin embargo, esto tiene un problema, javascript. Los módulos agregan JavaScript a la etiqueta principal a través de la API de Joomla. Para combatir esto, efectivamente necesitaría agregar más al archivo module.php para averiguar qué hay en la etiqueta de encabezado, qué no está ya en la página actual y en efecto encontrar y agregar lo que se necesita. Este proceso sería bastante difícil, pero si conoce los módulos que lo hacen, podría agregar más a su llamada ajax para hacerlo automáticamente dependiendo del módulo.

Esto lo ayudará a "cargar" el módulo, después de que se cargue a través de ajax simplemente use jquery para agregar el html a la página donde lo necesita, para "descargarlo", simplemente elimínelo del dom.

eso se puede hacer con jQuery(ROOT_ELEMENT_OF_MODULE).remove(); para eliminar y jQuery(PARENT_ELEMENT_TO_INSERT_MODULE).html(MODULE_HTML);. Por supuesto, hay variaciones que se pueden hacer, pero esa es la explicación simple.

5
Jordan Ramstad