如何将脚本添加到Joomla 2.5中的脚本列表顶部

时间:2013-07-16 18:54:43

标签: php joomla

我在模板文件的顶部使用$doc->addScript来添加我的脚本(和jquery),但之前会添加组件。

我可以控制此输出队列吗?

4 个答案:

答案 0 :(得分:1)

我正在为Joomla 3.3.x

写这篇文章

不幸的是,如果没有黑客攻击核心文件(不要这样做!!)或者使用自己的实现进行javascript添加,这是不可能的。

如果你看一下[joomlaroot] \ libraries \ joomla \ document \ document.php - >第446行,其中定义了函数addScript,您将看到,JDocument中的_scripts-Array是一个assoc。数组,其中键是脚本的URL。

如果您不想重写在系统中添加脚本和每个已安装扩展程序的joomla方法,则应在<<>之后在模板中添加javascripts。 jdoc:include type =" head" >

You could write a system-plugin,使用事件" onBeforeCompileHead"重新排序文档脚本,但我认为这太多了。

我不知道,为什么joomla不会简单地在addScript()中使用sort-attribute,这是非常需要的。还可以实现脚本依赖性。即使是Wordpress也可以做到这一点。

编辑:您可以做的是使用JDocument::addCustomTag()在joomla脚本之后添加脚本。因为自定义标记是在所有脚本之后呈现的。虽然这不会影响其他组件已经加载的脚本的顺序。

答案 1 :(得分:1)

您不需要使用foreach循环。

对于Joomla 2.5:在你的模板中index.php如果你想要添加一个脚本,请添加以下内容,例子显示包含jquery:

$headData = $this->getHeadData();
reset($headData['scripts']);
$newHeadData = $headData['scripts'];
$jquery = array('http://code.jquery.com/jquery-1.9.1.min.js' => array('mime' => 'text/javascript', 'defer' => FALSE, 'async' => FALSE));
$newHeadData = $jquery + $newHeadData;
//$some_other_script = array("path-to-your-script" => array('mime' => 'text/javascript', 'defer' => FALSE, 'async' => FALSE));
//$newHeadData = $some_other_script + $newHeadData;
$headData['scripts'] = $newHeadData;
$this->setHeadData($headData);

对于Joomla 3.3:这可能与Joomla 2.5的工作方式相同,因为函数getHeadData()和setHeadData()仍然存在。请参阅API文档:http://api.joomla.org/cms-3/classes/JDocumentHTML.html

答案 2 :(得分:0)

您需要修改模板的index.php文件。以下内容包括Joomla's head section

<jdoc:include type="head"/>

只需在此之后(或之前)移动$doc->addScript即可先设置哪些加载。文件从上到下加载,因此顶部的任何内容都将首先加载。

答案 3 :(得分:0)

这可以做到,但有点棘手。以下代码基于https://gist.github.com/AmyStephen/5971447

$head = JFactory::getDocument()->getHeadData();
$scripts = $head['scripts'];
$newScripts = array();

foreach ($scripts as $key => $value)
{
   if (/**  test to reorder the scripts */) 
   {
        $newScripts[$key] = $value;
    }
 }            

 $head['scripts'] = $newScripts;
 JFactory::getDocument()->setHeadData($head);

换句话说,脚本存储为数组,您需要重新排序。