it-swarm.it

Jhtml :: ordine degli script - come rimandare fino a quando jQuery non è stato caricato?

Io uso JHtml::script per aggiungere script alle mie pagine in un modulo sviluppato su misura. Tuttavia, questi script vengono iniettati nell'intestazione prima dell'aggiunta di J3 in jQuery, ad esempio:

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

Come posso forzare Joomla a caricare jQuery prima di qualsiasi altro script?

11
codinghands

Dovresti chiamare

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

prima dell'altro tuo JHtml :: script. AFAIK questo assicura che jQuery sia caricato per primo.

15
fruppel

se ho letto correttamente la tua domanda, stai sviluppando il tuo modulo.

Prova questo, in default.php - la vista del modulo (in "tmpl"):

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

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

O questo :

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

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

In entrambi i casi, i tuoi file JS dovrebbero essere iniettati dopo jQuery, a condizione che tu abbia creato una cartella "asset" e una cartella "css" e una "js" all'interno.

La seconda soluzione è più conforme all'API joomla 3.X.X.

Spero che sia d'aiuto.

2
ghazal

Ho riscontrato questo problema la scorsa settimana ed era correlato a dove stavo chiamando JHtml :: script. Lo stai facendo nella tua vista o nel modello della vista? Se provi ad aggiungere gli script nella vista stessa (views/yourview/view.html.php) verranno inseriti prima degli script di Joomla !, ma se aggiungi gli script nel template (views/yourview/tmpl/default.php) verranno inseriti dopo gli script di Joomla !.

In bocca al lupo!

2
Zachary Draper

Volevo aggiungere i miei due bit dopo il fatto. Ho un paio di script e fogli di stile che devono essere caricati per ogni vista che abbiamo nel componente e volevo che un singolo punto accadesse, assicurando anche che fossero caricati nella sequenza corretta.

Nel file 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

Ciò è probabilmente dovuto al metodo che lo sviluppatore di mod_tiles ha usato per importare gli script. Presumo che non si siano attenuti agli standard di codifica Joomla in questa situazione.

Hai 2 opzioni (che mi viene in mente) hwre:

  1. Se gli script vengono importati da un file all'interno della cartella tmpl all'interno del modulo, è possibile eseguire un Sostituzione modello e modificare il modo in cui lo script viene importato, usando JHtml.
  2. È possibile scaricare e installare jQuery Easy che è un plug-in che importa jQuery e lo posiziona sopra tutti gli altri script.

Spero che sia di aiuto

0
Lodder