Загрузка jQuery перед другим Javascript в Joomla 3

Я адаптирую пользовательский компонент для Joomla 3. Он опирается на jQuery, который я ранее загрузил сам. Теперь, когда он включен в базовый шаблон, мне это не нужно. Однако сначала загружается мой собственный javascript, основанный на jQuery. Я загружаю их, используя следующую форму:

$document = JFactory::getDocument();
$document->addScript( PATH TO SCRIPT);

Это правильно включает их в элемент <head>, но они загружаются перед jQuery.

Некоторый быстрый поиск показывает abstract class JHtmlJquery в libraries/cms/html/jquery.php, но я не уверен, откуда это вызывается.

Как я могу изменить порядок загрузки, чтобы jQuery загружался перед моими скриптами, которые от него зависят? И можно ли это сделать, не вникая в код ядра?


person Ben Jacobs    schedule 25.10.2012    source источник
comment
используйте $document-›addCustomTag('‹script src=PATH TO SCRIPT type=text/javascript›‹/script›'); пользовательские теги будут загружены после загрузки всех остальных скриптов.   -  person Stefan    schedule 27.01.2015


Ответы (4)


Ответ Марио идет в правильном направлении, но не совсем так. Оказывается, вы должны включить код для JHtml::('bootstrap.framework'); в свой компонент (а не только в файлы шаблона) перед загрузкой дополнительных скриптов. Я использовал стандартный шаблон J3, protostar, который включает в себя загрузчик Twitter. шаблон index.php.

Код для моего пользовательского view.html.php теперь выглядит следующим образом:

class MyView extends JViewLegacy
{
    function display($tpl = null)
    {
        $document = JFactory::getDocument();
        JHtml::_('bootstrap.framework');

        $document->addScript( PATH_TO_SCRIPT );

        ...
    }
}

Это ведет себя так, как ожидалось, и файлы jQuery и Bootstrap (jquery.min.js, jquery-noconflict.js и bootstrap.min.js) включаются в <head> перед моими пользовательскими сценариями.

person Ben Jacobs    schedule 29.10.2012

Какой шаблон вы используете? В J3 здравый смысл загружать платформу jQuery внизу страницы, чтобы страницы загружались быстрее. Найдите в своем шаблоне JHtml::_('bootstrap.framework'); // Loads the jQuery js scripts и попробуйте после этого загрузить js.

person McRui    schedule 26.10.2012
comment
Это не так хорошо, например, K2 (наиболее часто используемый CCK для Joomla), и многие компоненты требуют, чтобы jQuery был загружен ранее. - person Simbus82; 19.03.2014

Joomla, вероятно, записывает скрипты и файлы css, включенные в способ $document->addScript( PATH TO SCRIPT);, в том порядке, в котором они добавляются при выполнении кода компонента и модуля.

Я немного искал, но не смог найти способ повлиять на загрузку отдельных объявлений или jQuery. Но могу предложить другое решение.

Я не могу сказать, что уверен, что это будет САМОЕ решение вашей проблемы, потому что я понятия не имею, что делает ваш код или когда ему нужно что-то делать. Итак, я прихожу с самым широким возможным исправлением;)

Это будет работать, если ваш код не должен быть активен до того, как страница будет готова.

Оберните свой собственный код в оператор js on ready, чтобы он ничего не делал, пока страница (и, следовательно, jQuery не будет загружена).

if (document.readyState === "complete") { 
    DoYourStuff(); 
}
person Mark Vink    schedule 26.10.2012

person    schedule
comment
Это, пожалуй, лучшее решение. Он элегантный и следует парадигме Joomla. - person Ben Jacobs; 09.04.2013