Загрузка 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 загружался перед моими сценариями, которые зависят от него? И могу ли я сделать это, не вникая в основной код?

4 ответов


Я нашел решение. Я не хотел, чтобы как шаблон, так и компоненты загружали bootstrap, плюс на страницах, которые являются только отдельными статьями, которые загружают некоторые модули, я не хотел, чтобы каждый модуль загружал bootstrap.. (Я имею в виду, что это становится немного смешным..) Поэтому я решил полностью удалить bootstrap из шаблона, и я построил системный плагин, который просто загружает bootstrap, а затем я установил порядок загрузки плагина для загрузки первым. Завод отличный..

// Bootstrap Loader


    jimport('joomla.plugin.plugin');

    class plgSystemBootstrapLoader extends JPlugin {

        function onAfterRoute() {

            // Load Bootstrap
            JHtml::_('bootstrap.framework');
            $document = JFactory::getDocument();
            $document->addStyleSheet('/media/jui/css/bootstrap.min.css');
            $document->addStyleSheet('/media/jui/css/bootstrap-responsive.css');
        }

    }

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

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

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

        $document->addScript( PATH_TO_SCRIPT );

        ...
    }
}

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


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


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

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

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

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

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

if (document.readyState === "complete") { 
    DoYourStuff(); 
}