0

$doc->addScript在模板文件顶部使用将我的脚本(和jquery)添加到头部,但组件之前添加了它们的脚本。

我可以控制这个输出队列吗?

4

4 回答 4

1

我正在为 Joomla 3.3.x 写这个

不幸的是,如果不破解核心文件(不要那样做!!)或使用自己的实现来添加 javascript,就无法做到这一点。

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

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

您可以编写一个系统插件,使用事件“ onBeforeCompileHead ”重新排序文档脚本,但我认为这太多了。

我不知道,为什么 joomla 不简单地在 addScript() 中使用排序属性,这是非常需要的。也可以实现脚本依赖。甚至 Wordpress 也可以做到这一点。

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

于 2014-09-24T09:01:00.500 回答
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

于 2014-09-24T10:49:19.923 回答
0

您需要修改模板的index.php文件。以下包括Joomla 的头部部分

<jdoc:include type="head"/>

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

于 2013-07-16T19:03:30.917 回答
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);

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

于 2013-07-17T01:21:08.913 回答