Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 乔姆拉!在文章的文档头中添加脚本_Php_Joomla_Joomla1.7 - Fatal编程技术网

Php 乔姆拉!在文章的文档头中添加脚本

Php 乔姆拉!在文章的文档头中添加脚本,php,joomla,joomla1.7,Php,Joomla,Joomla1.7,我们有几个页面需要特别注意,jqueryui将从外部脚本调用,这些脚本将“以某种方式”添加到文章的标题部分 我尝试过使用jumi,但是它不是最好的选择(用js代替php将其呈现在html正文中),我添加javascript文件的唯一方法是包含一个php文件,该文件将响应a,但正如人们所想象的,这在性能方面既不优雅也不高效 另一个尝试是,我尝试使用以下方法,而不是重复脚本: <?php $document = &JFactory::getDocument(); $docume

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

我尝试过使用jumi,但是它不是最好的选择(用js代替php将其呈现在html正文中),我添加javascript文件的唯一方法是包含一个php文件,该文件将响应a,但正如人们所想象的,这在性能方面既不优雅也不高效

另一个尝试是,我尝试使用以下方法,而不是重复脚本:

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

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

我也尝试过easy header,但是,它似乎会在所有文章中包含这些文件,我不希望这样,因为它会对带宽和未来可能出现的javascript问题产生相当大的影响

我是joomla的新手,所以任何能提供一些灵活性的东西都是很好的答案

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

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

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);
$myJS=“”
$content=JResponse::getBody();//获取准备发送到浏览器表单中的html
$hdPos=strpos($content');
$hdPos+=7//移动位置以包含标记
$bodyLen=strlen($content);
$content=substr($content,0,$hdPos)$myJS。substr($content,$hdPos,$bodyLen);
JResponse::setBody($content);
NB:这是未经测试的,我最近没有使用Jumi,但它应该已经关闭了。

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);
$myJS=“”
$content=JResponse::getBody();//获取准备发送到浏览器表单中的html
$hdPos=strpos($content');
$hdPos+=7//移动位置以包含标记
$bodyLen=strlen($content);
$content=substr($content,0,$hdPos)$myJS。substr($content,$hdPos,$bodyLen);
JResponse::setBody($content);

注意:这是未经测试的,我最近没有使用Jumi,但它应该很接近。

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


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

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


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

将addScript()方法放在哪里?在一篇文章里面?您想只在该文章上加载jquery吗?尝试在模板上手写,但仅在条件上加载?addscript在jumi附带的php文件中调用,但是它没有将javascript添加到文章中,Thinks?addscript()方法放在哪里?在一篇文章里面?您想只在该文章上加载jquery吗?尝试在模板上手写,但仅在条件上加载?addscript在jumi附带的php文件中调用,但是它没有将javascript添加到文章中,想法?+1感谢您的回答,如果它在一定程度上解决了我的问题,我会测试并接受它作为答案。我刚刚修复了一些在评论和JS示例周围的引用中被清除的标记。有些东西工作不正常,脚本没有附加到标题部分…:可能是大部分内容已经流式传输了吗?我已经找到了它不能正常工作的原因,这是因为jumi将原始正文保存在$content私有变量中,并且在onAfterRender结束时,它将使其内容延迟。。。有没有办法克服这个问题?没关系,我终于解决了!!我在jumi中将“$content=preg_replace($regex,$output,$content,1);”替换为“JResponse::setBody(preg_replace($regex,$output,JResponse::getBody(),1));”并注释了“JResponse::setBody($content);”为了避免丢失对内容的更改,我还对代码进行了一些调整,并使用了“str_replace”替换为我的脚本标记,后跟“”现在一切正常+1谢谢你的回答,如果它在一定程度上解决了我的问题,我会测试并接受它作为答案。我刚刚修复了一些在评论和JS示例周围的引用中被清除的标签。有些东西工作不正常,脚本没有附加到标题部分…:可能是大部分内容已经流式传输了吗?我已经找到了它不能正常工作的原因,这是因为jumi将原始正文保存在$content私有变量中,并且在onAfterRender结束时,它将使其内容延迟。。。有没有办法克服这个问题?没关系,我终于解决了!!我将“$content=preg_replace($regex,$output,$content,1);”替换为“JResponse::setBody”(