【问题标题】:Joomla! add script in document head from articleJoomla!从文章的文档头中添加脚本
【发布时间】:2012-01-24 07:06:13
【问题描述】:

我们有几个页面需要特别注意,jquery-ui 将从外部脚本调用,这些脚本将“以某种方式”添加到文章的头部。

我尝试过使用 jumi,但这不是最好的选择(包括 js 而不是 php 会在 html 正文中呈现它),我可以添加 javascript 文件的唯一方法是包含一个 php 文件会呼应 a ,但正如人们想象的那样,这在性能方面既不优雅也不高效。

另一种尝试是,我没有回显脚本,而是尝试使用:

<?php
  $document = &JFactory::getDocument();
  $document->addScript( "path/to/jsfile.js" );
?>

但它并没有像我预期的那样工作,似乎 joomla 在这个 php 脚本有机会执行之前创建了 head 部分。

我也尝试了简单的标题,但是,它似乎会包含所有文章中的文件,我不希望这样,因为它会在带宽和可能的 javascript 问题方面产生相当大的影响路。

我对 joomla 很陌生,所以任何能提供一些灵活性的东西都可以作为答案。

如果有不清楚的地方,请询问,我会尽力回答。

请注意,我使用的是 joomla 1.7 和 php5。

【问题讨论】:

  • 你把 addScript() 方法放在哪里?在一篇文章里面?你想只在那篇文章上加载 jquery 吗?尝试在模板上手写但仅在有条件的情况下加载?
  • 在 jumi 包含的 php 文件中调用了 addscript,但是它没有将 javascript 添加到文章中,想法?

标签: php joomla joomla1.7


【解决方案1】:

Jumi 使用 onAfterRender 事件(查看 2.0.6 插件)——此时我认为

标签已经被写出,事实上整个文档已经被渲染.

您可以尝试获取文档正文,然后搜索结束标记 并在其之前插入脚本链接。像这样的:

$myJS    = "<script type='text/javascript' src='http://mysever.com/my.js'>"
$content = JResponse::getBody(); // gets the html in it's ready to send to browser form
$hdPos   = strpos($content, '</head>');
$hdPos  += 7;  //move position to include the <head> tag
$bodyLen = strlen($content);
$content = substr($content, 0, $hdPos) . $myJS . substr($content, $hdPos, $bodyLen);
JResponse::setBody($content);

注意: 这是未经测试的,这些天我不使用 Jumi,但它应该很接近。

【讨论】:

  • +1 谢谢你的回答,如果它在一定程度上解决了我的问题,我会测试并接受它作为答案。
  • 我刚刚修复了一些在评论和 JS 示例周围的引号中被清除的标签。
  • 某些东西不能正常工作,脚本没有附加到头部...):可能大部分内容已经流式传输了吗?
  • 我找到了为什么它不能正常工作,这是因为 jumi 将原始正文保存在 $content 私有变量中,并且在 onAfterRender 结束时它会设置回它的内容......关于如何克服这个问题的任何想法?
  • 没关系,我终于解决了!!我已经替换了“$content = preg_replace($regex, $output, $content, 1);”用“JResponse::setBody(preg_replace($regex, $output, JResponse::getBody(), 1));”在 jumi 中并评论了“JResponse::setBody($content);”为了避免丢失对内容的更改,我还对您的代码进行了一些调整,并使用“str_replace”将 替换为我的脚本标签,然后是“”,现在一切正常!
【解决方案2】:

您不必经历这一切! 转到:扩展 -> 模板管理器 -> 模板选项卡(默认情况下在“样式”上)-> 转到您的模板并单击“编辑 HTML”。您将能够直接在标题中添加代码,它将加载到所有页面中。

更优雅一点的方法是在标题中定义一个函数来执行您想要的操作 - 并从您想要的特定文章的正文中调用它。

【讨论】:

    猜你喜欢
    • 2016-02-16
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多