web-dev-qa-db-fra.com

Jhtml :: ordre du script - Comment reporter à jQuery le chargement?

J'utilise JHtml::script pour ajouter des scripts à mes pages dans un module personnalisé. Cependant, ces scripts sont injectés dans la tête avant que J3 n’ajoute jQuery - par exemple:

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

Comment puis-je forcer Joomla à charger jQuery avant tout autre script?

11
codinghands

Tu devrais appeler

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

avant votre autre script JHtml ::. Autant que je sache, jQuery est chargé en premier.

15
fruppel

si j'ai bien lu votre question, vous développez votre propre module.

Essayez ceci, dans default.php - la vue du module (dans "tmpl"):

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

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

Ou ca :

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

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

Dans les deux cas, vos fichiers JS doivent être injectés après jQuery, à condition que vous ayez créé un dossier "asset", ainsi qu'un dossier "css" et un "js".

La deuxième solution est plus conforme à l’API joomla 3.X.X.

J'espère que ça aide.

2
ghazal

J'ai rencontré ce problème la semaine dernière et il était lié à l'endroit où j'appelais JHtml :: script. Faites-vous cela dans votre vue ou dans le modèle de la vue? Si vous essayez d'ajouter les scripts dans la vue elle-même (views/yourview/view.html.php), ils seront insérés avant les propres scripts de Joomla!, Mais si vous ajoutez les scripts dans le modèle (views/yourview/tmpl/default.php) ils seront insérés après les scripts de Joomla!.

Bonne chance!

2
Zachary Draper

Je voulais ajouter mes deux bits après le fait. J'ai quelques scripts et feuilles de style qui doivent être chargés pour chaque vue du composant. Je voulais un point unique pour que cela se produise, garantissant également qu'ils sont chargés dans le bon ordre.

Dans le fichier 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

Ceci est probablement dû à la méthode que le développeur de mod_tiles a utilisé pour importer les scripts. Je suppose qu'ils ne se sont pas tenus aux normes de codage Joomla dans cette situation.

Vous avez 2 options (que je peux penser) hwre:

  1. Si les scripts sont importés depuis un fichier du dossier tmpl du module, vous pouvez effectuer un remplacement du modèle et le modifier. la manière dont le script est importé, en utilisant JHtml.
  2. Vous pouvez télécharger et installer jQuery Easy , un plugin qui importe jQuery et le place au-dessus de tous les autres scripts.

J'espère que cela t'aides

0
Lodder