Загрузка 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();
}