ti-enxame.com

Como posso usar com_ajax para carregar e descarregar outro módulo (para Adaptive Design)

Este é um acompanhamento da pergunta Como um módulo pode ser desativado com base no tamanho do dispositivo ou da janela de visualização no Joomla 3 para otimizar o desempenho de dispositivos móveis?

Como posso usar com_ajax para carregar e descarregar um módulo? A chamada pode ser feita usando javascript puro ou jquery, e será baseada no tamanho da janela de visualização (estamos usando o mediacheck.js para isso: https://github.com/sparkbox/mediaCheck ).

Dependendo de onde esta resposta for, podemos até [reunir nosso desenvolvedor] um componente para permitir esse tipo de carregamento dinâmico (escolha pontos de interrupção, escolha quais módulos carregar/descarregar).

Justificativa: Responsivo/Adaptável (escolha seu sabor) é essencial hoje em dia, assim como reduzir o tamanho da carga para dispositivos móveis (velocidade 3G lenta, se estiver em uma boa área de recepção, aqui no Brasil). Se eu posso usar 10 ~ 15k de jQuery/Javascript para evitar carregar 20 ~ 200k de um módulo (os módulos podem conter imagens, portanto, sim, podem atingir um tamanho bastante grande), sou a favor. Reduzir a bagunça da tela também é essencial para um bom design móvel. Podemos até argumentar que isso é "móvel primeiro", porque projetamos sem o módulo e o carregamos conforme o tamanho da tela permitir.

7

com_ajax só é realmente usado se os dados do módulo forem suportados (baseado em JSON), embora tenha outros recursos. Em alguns casos, a maneira mais fácil de "apenas" carregar um módulo é criar um novo arquivo de modelo. Isso pode ser feito criando algo como "module.php" no diretório do modelo. Então, usando algo assim por dentro.

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

Isso deve carregar apenas o módulo em uma página, usando um URL como index.php?tmpl=module&module_pos=foo Em uma solicitação ajax, você poderá obter "apenas" os dados do módulo. Isso carregará todos os módulos atribuídos à posição denominada module_pos.

No entanto, isso tem um problema, javascript. Os módulos adicionam javascript à tag head através da API do Joomla. Para combater isso, você efetivamente precisará adicionar mais ao arquivo module.php para descobrir o que está na tag head, o que ainda não está na página atual e, com efeito, encontrar e adicionar o que é necessário. Esse processo seria bastante difícil, mas se você conhecer os módulos fazendo isso, poderá adicionar mais à sua chamada ajax para fazer isso automaticamente, dependendo do módulo.

Isso o ajudará a "carregar" o módulo, depois que ele for carregado via ajax, basta usar o jquery para adicionar o html à página em que você precisa, para "descarregá-lo" e apenas removê-lo do dom.

isso pode ser feito com jQuery(ROOT_ELEMENT_OF_MODULE).remove(); para remoção e jQuery(PARENT_ELEMENT_TO_INSERT_MODULE).html(MODULE_HTML);. Claro que existem variações que podem ser feitas, mas essa é a explicação simples.

5
Jordan Ramstad