JHtml:script()和$ doc-> addScript有什么区别?


10

我最近开发了一个模块,该模块需要将某些JS和CSS文件插入<head>每个页面的中。最初,我使用:

$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');

但是,我注意到,启用缓存后,网站会加载的缓存版本/cache和的非缓存版本/modules/mod_x/js/,从而导致JS错误。

当我将其更改为:

JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');

该脚本仅从缓存加载一次,从而解决了这些错误。

在文档读到,该addScript方法比该JHtml:script方法更“低级” ,但不仅如此...

当然,您还需要手动编写某些步骤[JHtml:script为您完成],这些步骤将使用上面的[JHtml:script方法] [如果使用addScript]自动完成。

...没有进一步的细节。

那有什么区别呢?我假设JHtml:script最终会addScript在某个时刻调用文档对象,但是是否首先采取了其他中间步骤?


4
我已经重写了joomla文档以尝试对其进行更新-现在看看它是否更有意义?
乔治·威尔逊,

1
@GeorgeWilson Joomla文档最近确实得到了改进。谢谢:)
TryHarder 2014年

有关样式表相关的问题:joomla.stackexchange.com/q/10062/5239
Flimm

Answers:


8

JHtml::script包含其他逻辑。有关API参考,请参见http://api.joomla.org/cms-3/classes/JHtml.html#method_script

默认情况下,它将检测调试设置和使用的浏览器并加载匹配的脚本。例如,启用调试时,它将加载文件的未压缩版本(如果存在)。

有一些可选设置,这些设置允许在模板级别等覆盖文件。

迈克尔·巴克(Michael Babker)撰写了一份很好的指南,说明如何使用它JHtml::script()来允许覆盖:http : //www.babdev.com/blog/139-use-the-media-folder-allow-overridable-media

回购中的功能以供参考:https : //github.com/joomla/joomla-cms/blob/staging/libraries/cms/html/html.php#L659

乔治现在正在更新的官方文档页面:http//docs.joomla.org/J3.3Adding_JavaScript_and_CSS_to_the_page


2
感谢您的回答。API参考非常简洁-是否对detect_browser和detect_debug的效果有更全面的解释,并且当您说“可选设置”和“其他内容”时,这些内容在任何地方都有记载吗?
codinghands

我在Michael的文章中添加了一个链接,该链接解释了替代部分。至于调试和浏览器部分,我认为没有文档。您将必须阅读该代码。
巴库

1
因此,例如,如果存在一个未压缩和压缩的js文件,并且打开了debug,那么在关闭调试功能时,它将加载filename-uncompressed.js以及filename.js。因为当调试过它查找然后浏览器的文件名,文件名browser.js浏览器,browserversion.js等
乔治·威尔逊

2
这是一个很棘手的答案-谢谢@Bakual和@GeorgeWilson!
codinghands

1
不要忘记,JHtml还可以将脚本或样式表的MD5sum附加到缓存无效状态。
Flimm 2015年

4

用两个词:

  • JHtml::script() -允许您覆盖特定脚本(除了已经附加到JDocument的脚本之外),取决于某些因素(请参阅@Bakual答案);
  • $doc->addScript() -将脚本直接附加到文档,而不检查覆盖;

如果您是扩展开发人员,那么强烈建议JHtml::script()您在添加脚本时使用。这将使您的用户可以根据自己的需要覆盖某些特定的脚本。
也有类似的CSS方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.