it-swarm.dev

Come posso usare com_ajax per caricare e scaricare un altro modulo (per Adaptive Design)

Questo è il seguito della domanda Come si può disabilitare un modulo in base alla dimensione del dispositivo o della finestra in Joomla 3 per ottimizzare le prestazioni dei dispositivi mobili?

Come posso usare com_ajax per caricare e scaricare un modulo? La chiamata può essere effettuata utilizzando javascript o jquery puro e si baserà sulla dimensione del viewport (per questo stiamo usando mediacheck.js: https://github.com/sparkbox/mediaCheck ).

A seconda di dove arriva questa risposta, possiamo persino [convincere il nostro sviluppatore] a mettere insieme un componente per consentire questo tipo di caricamento dinamico (scegliere i punti di interruzione, scegliere quali moduli caricare/scaricare).

Motivazione: Responsive/Adaptive (scegli il tuo gusto) è essenziale al giorno d'oggi, così come ridurre le dimensioni del carico per i dispositivi mobili (bassa velocità 3G se su una buona area di accoglienza, qui in Brasile). Se posso usare 10 ~ 15k di jQuery/Javascript per evitare di caricare 20 ~ 200k di un modulo (i moduli possono contenere immagini, quindi sì, possono raggiungere dimensioni abbastanza grandi), sono tutto per questo. Ridurre il disordine dello schermo è anche un must per un buon design mobile. Possiamo persino sostenere che questo è "mobile first", perché progettiamo senza il modulo, quindi lo cariciamo quando le dimensioni dello schermo lo consentono.

com_ajax è davvero utilizzato solo se i dati per il modulo sono supportati (basato su JSON), sebbene abbia altre funzionalità. In alcuni casi il modo più semplice per "caricare" un modulo è creare un nuovo file modello. Questo può essere fatto creando qualcosa come "module.php" nella directory dei template. Quindi usando qualcosa di simile dentro.

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

Questo dovrebbe caricare solo il modulo in una pagina, usando un url come index.php?tmpl=module&module_pos=foo In una richiesta Ajax dovresti essere in grado di ottenere "solo" i dati del modulo. Questo caricherà tutti i moduli assegnati alla posizione definita da module_pos.

Questo tuttavia ha un problema, javascript. I moduli aggiungono javascript al tag head tramite l'API di Joomla. Per combatterlo dovresti effettivamente aggiungere altro al file module.php per scoprire cosa c'è nel tag head, cosa non è già nella pagina corrente e in effetti trovare e aggiungere ciò che è necessario. Questo processo sarebbe piuttosto difficile ma se conosci i moduli che lo fanno, potresti aggiungere altro alla tua chiamata ajax per farlo automaticamente a seconda del modulo.

Questo ti aiuterà a "caricare" il modulo, dopo che si carica tramite Ajax basta usare jquery per aggiungere l'html alla pagina in cui è necessario, per "scaricarlo", basta rimuoverlo dal dom.

che può essere fatto con jQuery(ROOT_ELEMENT_OF_MODULE).remove(); per la rimozione e jQuery(PARENT_ELEMENT_TO_INSERT_MODULE).html(MODULE_HTML);. Naturalmente ci sono variazioni che possono essere fatte, ma questa è la semplice spiegazione.

5
Jordan Ramstad