我正在调整自定义组件到Joomla 3.它依赖于我以前加载的jQuery。现在它已包含在基本模板中,我不需要。但是,我首先加载了依赖于jQuery的自定义javascript。我使用以下表单加载它们:
$document = JFactory::getDocument();
$document->addScript( PATH TO SCRIPT);
这正确地将它们包含在<head>
元素中,但它们在jQuery之前加载。
有些快速搜索会在abstract class JHtmlJquery
中显示libraries/cms/html/jquery.php
,但我不确定这是从哪里来的。
如何更改加载顺序以便在依赖它的脚本之前加载jQuery?我可以不进入核心代码吗?
答案 0 :(得分:10)
马里奥的答案正朝着正确的方向发展,但它并没有做到这一点。事实证明,在加载其他脚本之前,您必须在组件中包含JHtml::('bootstrap.framework');
的代码(而不仅仅是模板文件)。我使用的是库存J3模板protostar,其中包括twitter bootstrap在其模板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>
中。
答案 1 :(得分:6)
我找到了解决方案。我不想要模板和组件加载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');
}
}
答案 2 :(得分:2)
您使用的是什么模板?在J3中,在页面底部加载jQuery平台是一种常识,因此页面加载速度更快。在模板中查找
JHtml::_('bootstrap.framework'); // Loads the jQuery js scripts
并在此之后尝试加载你的js。
答案 3 :(得分:1)
Joomla可能会按照$document->addScript( PATH TO SCRIPT);
方式编写的脚本和css文件按照添加顺序编写,执行组件和模块代码。
我搜索了一下,却找不到影响单独声明或jQuery加载的方法。但我可以提供其他解决方案。
我不能说我确定这将成为您问题的解决方案,因为我无法知道您的代码是做什么的,或者什么时候需要做某些事情。所以我可以进行最广泛的修复;)
只要您的代码在页面就绪之前不必处于活动状态,这将有效。
将自定义代码包装在js on ready语句中,因此在页面(以及jQuery已加载)之前它不会执行任何操作。
if (document.readyState === "complete") {
DoYourStuff();
}