it-swarm-es.tech

Jhtml :: orden de script: ¿cómo posponer hasta que se haya cargado jQuery?

Yo suelo JHtml::script para agregar scripts a mis páginas en un módulo desarrollado a medida. Sin embargo, estos scripts se inyectan en la cabeza antes de que J3 agregue jQuery, por ejemplo:

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

¿Cómo puedo forzar a Joomla a cargar jQuery antes que cualquier otro script?

11
codinghands

Deberías llamar

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

antes de su otro JHtml :: script. AFAIK esto asegura que jQuery se cargue primero.

15
fruppel

si leo su pregunta correctamente, está desarrollando su propio módulo.

Pruebe esto, en default.php - la vista del módulo (en "tmpl"):

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

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

O esto :

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

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

En ambos casos, sus archivos JS deben inyectarse después de jQuery, siempre que haya creado una carpeta "activo" y una carpeta "css" y una "js" dentro.

La segunda solución está más de acuerdo con la API de joomla 3.X.X.

Espero eso ayude.

2
ghazal

Me encontré con este problema la semana pasada y estaba relacionado con el lugar al que estaba llamando JHtml :: script. ¿Estás haciendo esto en tu vista o en la plantilla de la vista? Si intenta agregar los scripts en la vista misma (views/yourview/view.html.php), se insertarán antes que los propios scripts de Joomla!, Pero si agrega los scripts en la plantilla (views/yourview/tmpl/default.php) se insertarán después de los scripts de Joomla!.

¡Buena suerte!

2
Zachary Draper

Quería agregar mis dos bits después del hecho. Tengo un par de scripts y hojas de estilo que deben cargarse para cada vista que tenemos en el componente, y quería un solo punto para que eso ocurra asegurando también que se carguen en la secuencia correcta.

En el archivo 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

Esto probablemente se deba al método que el desarrollador de mod_tiles ha utilizado para importar los scripts. Supongo que no se han apegado a los estándares de codificación de Joomla en esta situación.

Tienes 2 opciones (que se me ocurren) hwre:

  1. Si los scripts se importan de un archivo dentro de la carpeta tmpl dentro del módulo, puede realizar un Anulación de plantilla y cambiar la forma en que se importa el script, usando JHtml.
  2. Puede descargar e instalar jQuery Easy , que es un complemento que importa jQuery y lo coloca por encima de todos los demás scripts.

Espero que esto ayude

0
Lodder