我想在 'script' 之后添加一个字符串 at JHtml::_('script', $file, true, true);
I would like to add a string after 'script' at JHtml::_('script', $file, true, true);
在 Joomla 3.6 的 Recaptcha 插件的 recaptcha.php 文件中,我有以下代码:
case '2.0':
$theme = $this->params->get('theme2', 'light');
$file = 'https://www.google.com/recaptcha/api.js?hl=' . JFactory::getLanguage()->getTag() . '&render=explicit';
JHtml::_('script', $file, true, true);
$document->addScriptDeclaration('jQuery(document).ready(function($) {$(window).load(function() {'
. 'grecaptcha.render("' . $id . '", {sitekey: "' . $pubkey . '", theme: "' . $theme . '"});'
. '});});'
);
break;
在呈现的 html 页面上创建字符串:
<script src="https://www.google.com/recaptcha/api.js?hl=en-US&render=explicit" type="text/javascript"></script>
正在为重新验证加载 api.js。
由于我使用的是 Cloudflare 的 Rocket Loader 并且 Recaptcha 在网站上不起作用,我想将上面的行更改为:
<script data-cfasync="false" src="https://www.google.com/recaptcha/api.js?hl=en-US&render=explicit" type="text/javascript"></script>
之后的地方
- 我使用了一个变量 $cloud = 'data-cfasync="false"';并改变了
JHtml::('script', $file, true, true);到 JHtml::('script', $cloud,
$文件,真,真);
- 我试过了JHtml::script data-cfasync="false"
($file, true, true);
- 我试过 JHtml::('script data-cfasync="false"',
$file, true, true);
- 我试过了
JHtml::('script'.'data-cfasync="false"', $file, true, true);
但是什么都没用.......
我知道他们中的一些人很愚蠢,但我不是一个真正的程序员,你已经知道了。
我怎样才能做到这一点?
谢谢
乔治
如果您检查该函数的定义,您会看到最后一个参数允许您设置属性 - libraries/src/HTML/HTMLHelper.php
public static function script($file, $options = array(), $attribs = array()){
....
....
}
你可以像下面的代码那样做 -
JHtml::_('script', $file, array(), array('data-cfasync' => "false"));
但我不建议您这样做,因为您正在更改核心文件,这些更改将在下一次 Joomla 更新中丢失。建议您看看是否可以进行以下任何更改 -
1) 检查 Cloudflare 是否有一些选项可以排除特定脚本
2) 您可以使用与现有 recaptcha 插件相同的代码创建一个新插件
3) 您可以创建一个插件来删除 api.js 并添加具有该自定义属性的脚本。
我希望这能回答你的问题。
更新
较旧的 Joomla 版本有不同的定义,因此对于您的情况,我建议您按照以下说明进行操作 -
$script = '<script src="' . $file . '" data-cfasync="false"></script>';
$document = JFactory::getDocument();
$document->addCustomTag($script);
在 Joomla 3.6 的 Recaptcha 插件的 recaptcha.php 文件中,我有以下代码:
case '2.0':
$theme = $this->params->get('theme2', 'light');
$file = 'https://www.google.com/recaptcha/api.js?hl=' . JFactory::getLanguage()->getTag() . '&render=explicit';
JHtml::_('script', $file, true, true);
$document->addScriptDeclaration('jQuery(document).ready(function($) {$(window).load(function() {'
. 'grecaptcha.render("' . $id . '", {sitekey: "' . $pubkey . '", theme: "' . $theme . '"});'
. '});});'
);
break;
在呈现的 html 页面上创建字符串:
<script src="https://www.google.com/recaptcha/api.js?hl=en-US&render=explicit" type="text/javascript"></script>
正在为重新验证加载 api.js。 由于我使用的是 Cloudflare 的 Rocket Loader 并且 Recaptcha 在网站上不起作用,我想将上面的行更改为:
<script data-cfasync="false" src="https://www.google.com/recaptcha/api.js?hl=en-US&render=explicit" type="text/javascript"></script>
之后的地方
- 我使用了一个变量 $cloud = 'data-cfasync="false"';并改变了 JHtml::('script', $file, true, true);到 JHtml::('script', $cloud, $文件,真,真);
- 我试过了JHtml::script data-cfasync="false" ($file, true, true);
- 我试过 JHtml::('script data-cfasync="false"', $file, true, true);
- 我试过了 JHtml::('script'.'data-cfasync="false"', $file, true, true);
但是什么都没用.......
我知道他们中的一些人很愚蠢,但我不是一个真正的程序员,你已经知道了。 我怎样才能做到这一点? 谢谢 乔治
如果您检查该函数的定义,您会看到最后一个参数允许您设置属性 - libraries/src/HTML/HTMLHelper.php
public static function script($file, $options = array(), $attribs = array()){
....
....
}
你可以像下面的代码那样做 -
JHtml::_('script', $file, array(), array('data-cfasync' => "false"));
但我不建议您这样做,因为您正在更改核心文件,这些更改将在下一次 Joomla 更新中丢失。建议您看看是否可以进行以下任何更改 -
1) 检查 Cloudflare 是否有一些选项可以排除特定脚本
2) 您可以使用与现有 recaptcha 插件相同的代码创建一个新插件
3) 您可以创建一个插件来删除 api.js 并添加具有该自定义属性的脚本。
我希望这能回答你的问题。
更新
较旧的 Joomla 版本有不同的定义,因此对于您的情况,我建议您按照以下说明进行操作 -
$script = '<script src="' . $file . '" data-cfasync="false"></script>';
$document = JFactory::getDocument();
$document->addCustomTag($script);