ti-enxame.com

Jhtml :: script order - como adiar até o jQuery ser carregado?

Eu uso JHtml::script para adicionar scripts às minhas páginas em um módulo desenvolvido sob medida. No entanto, esses scripts são injetados na cabeça antes que o J3 adicione o jQuery - por exemplo:

<!-- my module js -->
<script src="/modules/mod_tiles/js/jquery.isotope.min.js" type="text/javascript"></script>
<script src="/modules/mod_tiles/js/jquery.hoverintent.min.js" type="text/javascript"></script>
<script src="/modules/mod_tiles/js/mod_tiles.js" type="text/javascript"></script>
<!-- then joomla loads jQuery --->
<script src="/media/jui/js/jquery-noconflict.js" type="text/javascript"></script>
<script src="/media/jui/js/jquery.min.js" type="text/javascript"></script>

Como forçar o Joomla a carregar o jQuery antes de outros scripts?

11
codinghands

Você deveria ligar

JHtml::_('jquery.framework');

antes do seu outro JHtml :: script. AFAIK, garante que o jQuery seja carregado primeiro.

15
fruppel

se eu li sua pergunta corretamente, você está desenvolvendo seu próprio módulo.

Tente isso, em default.php - a visão do módulo (em "tmpl"):

JHtml::stylesheet('modules/'.$module->module.'/assets/css/yourfile.css');

JHtml::script('modules/'.$module->module.'/assets/js/yourscript.js');

Ou isto :

JHtml::_('stylesheet', 'modules/'.$module->module.'/assets/css/anotherfile.css');

JHtml::_('script', 'modules/'.$module->module.'/assets/js/othercript.js');

Nos dois casos, os arquivos JS devem ser injetados após o jQuery, desde que você tenha criado uma pasta "asset" e uma pasta "css" e "js" dentro.

A segunda solução está mais de acordo com a API do joomla 3.X.X.

Espero que ajude.

2
ghazal

Encontrei esse problema na semana passada e estava relacionado a onde eu estava chamando JHtml :: script. Você está fazendo isso na sua visualização ou no modelo da visualização? Se você tentar adicionar os scripts na própria exibição (views/yourview/view.html.php), eles serão inseridos antes dos scripts do Joomla !, mas se você adicionar os scripts no modelo (views/yourview/tmpl/default.php) eles serão inseridos após os scripts do Joomla!.

Boa sorte!

2
Zachary Draper

Eu queria adicionar meus dois bits depois do fato. Eu tenho alguns scripts e folhas de estilo que precisam ser carregados para todas as visualizações que temos no componente e queria que um único ponto acontecesse, garantindo também que eles fossem carregados na sequência correta.

No arquivo components\myComponent\mycomponent.php:

defined('_JEXEC') or die;

// Include dependancies
jimport('joomla.application.component.controller');

JHtml::stylesheet('http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css', array(), true);
JHtml::stylesheet('components/com_mycomponent/assets/css/mycomponent.css');

JHtml::_('jquery.framework');   // Make sure jQuery is loaded before component JS
JHtml::script( 'components/mycomponent/assets/js/jquery.cookie.js');

// Execute the task.
$controller = JControllerLegacy::getInstance('Mycomponent');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();
0
GDP

Provavelmente, isso se deve ao método que o desenvolvedor de mod_tiles usado para importar os scripts. Eu suponho que eles não aderiram aos padrões de codificação Joomla nesta situação.

Você tem 2 opções (que eu posso pensar) hwre:

  1. Se os scripts estiverem sendo importados de um arquivo dentro da pasta tmpl dentro do módulo, você poderá executar uma Substituição do Modelo e alterar a maneira como o script está sendo importado, usando JHtml.
  2. Você pode baixar e instalar jQuery Easy , que é um plugin que importa o jQuery e o coloca acima de todos os outros scripts.

Espero que isto ajude

0
Lodder