我正在尝试从我的自定义joomla模板标题中删除不需要的脚本,我已设法删除除此之外的所有内容:
<script type="text/javascript">
jQuery(document).ready(function()
{
jQuery('.hasTooltip').tooltip({});
});
</script>
我已经搜索了几个小时,我已经尝试了很多东西来删除它,但我似乎无法摆脱它。这是我为删除其他我不想要的脚本所做的工作(对于有此问题的其他人):
# unset frameworks
JHtml::_('bootstrap.framework',false);
JHtml::_('jquery.framework',false);
# unset scripts
unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery.min.js']);
unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-noconflict.js']);
unset($doc->_scripts[$this->baseurl.'/media/jui/js/bootstrap.min.js']);
如果有人可以帮我删除该工具提示javascript,那就太棒了。哦,我不想触摸核心文件,所以我试图将它从模板index.php文件中删除。
答案 0 :(得分:4)
某些组件/模块/插件正在调用函数JHTML :: _('behavior.tooltip')。并且该功能添加了您的代码。
你可以这样做:
脏方法:转到libraries \ cms \ html \ bootstrap.php并在方法tooltip()中更改文件。但请记住它是一个核心文件,因此升级可以覆盖您的更改。
干净的方法,找到添加此代码的组件并删除或更改它。
祝你好运
答案 1 :(得分:3)
您必须手动解析$doc->_script
。 $doc->_scripts
数组包含链接到另一个源的脚本,而$doc->_script
用于脚本声明,例如工具提示。
答案 2 :(得分:3)
在您的网络根目录index.php(不是模板,http://domain.com/index.php)的末尾,替换$ app-&gt; execute();符合以下内容:
// Start the output buffer.
ob_start();
// Execute the application.
$app->execute();
// Get buffer
$buffer = ob_get_clean();
// Change HTML
$buffer = str_replace('<script type="text/javascript">'.chr(10).'jQuery(document).ready(function(){'.chr(10).' jQuery(\'.hasTooltip\').tooltip({"html": true,"container": "body"});'.chr(10).'});'.chr(10).' </script>','',$buffer);
// Output buffer
echo($buffer);
请注意,您需要使用模块创建的 EXACT HTML。这就是我的模块正在创建的,你的模块可能会略有不同。
除了执行这样的HTML重写之外,您还可以整理输出,删除模块的链接等。
我也用它来做更改网站版权年份的事情。在模块位置,我将当前年份称为&#34; {year}&#34;然后我添加另一个执行以下操作的str_replace:
$buffer = str_replace('{year}',date('Y'),$buffer);
Bingo,总是显示当前年份。
...享受
答案 3 :(得分:2)
我设法在模板的index.php文件中使用此代码摆脱嵌入式javascript:
unset($this->_script['text/javascript']);
免责声明:我不是PHP开发人员,因此使用上述代码需要您自担风险:)
答案 4 :(得分:2)
基于Joomla documents,需要考虑两件事:
a)在下面的代码中,您实际上是在启用/包括bootstrap和jquery:
# unset frameworks
JHtml::_('bootstrap.framework',false);// including bootstrap!
JHtml::_('jquery.framework',false);// including jquery!
启用bootstrap后,joomla会自动启用jquery,如果joomla启用了jquery,joomla会自动启用工具提示。
不要打电话给这些功能。您使用的unset
将正确删除bootstrap和jquery:
unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery.min.js']);
unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-noconflict.js']);
unset($doc->_scripts[$this->baseurl.'/media/jui/js/bootstrap.min.js']);
unset($doc->_scripts[$this->baseurl.'/media/jui/js/jquery-migrate.min.js']);
b)如果仍然包含工具提示脚本,它可能由JHtml::_('behavior.tooltip');
插入到已使用组件的某个位置。
最后,永远不要永远不要修改Joomla核心文件。这是最糟糕的做法。
<强> PS。强>
对于那些提到已插入工具提示脚本但却未在$doc
中找到它的人,因为$doc
不包含内联脚本。
答案 5 :(得分:1)
我已经遇到了这个问题,我正在使用Joomla 3.如果是你的情况那么你可以通过这样做来解决它:
Joomla 3附带了jQuery,所以通过自己添加Joomla,这可能会产生问题。
还要确保将jQuery包含在<jdoc:include type="head" />
之内。如果您需要包含它。但我不推荐这个。
希望这有帮助
答案 6 :(得分:1)
当我构建一个只有HTML5,CSS3和一些用于效果的小jQuery插件的Joomla模板/网站时,我遇到了同样的问题。包括沉重的Bootstrap只是为了展示一些我根本没用过的工具提示是不值得的。
虽然我已经取消了JDocument中的media / jui / js / bootstrap.min.js但这些代码行
jQuery(document).ready(function(){
jQuery('.hasTooltip').tooltip({"html": true,"container": "body"});
});
仍附加了libraries / cms / html / bootstrap.php。所以我收到错误“找不到功能工具提示”。
我通过在模板的JS文件中添加一个空函数来解决这个问题。
jQuery.fn.tooltip = function (option) { };
答案 7 :(得分:0)
有一个Joomla插件可以取消设置Bootstrap,还可以删除JHtml::_('behavior.tooltip');
在任何组件中某处插入的工具提示功能片段。
答案 8 :(得分:0)
使用以下代码创建系统插件。
第一个foreach循环unset
是添加到头部的.js
文件。下一个foreach循环unset
注入了js
标签内的<script>
代码。
有两个单独的属性,其中包含脚本_script
和_scripts
public function onBeforeCompileHead() {
// Front end
if ($this->app instanceof JApplicationSite) {
$doc = JFactory::getDocument();
$search = array(
// 'jquery',
// 'caption.js',
// 'bootstrap.min.js',
// 'core.js',
// 'keepalive.js',
// 'punycode.js',
// 'validate.js',
// 'calendar.js',
// 'calendar-setup.js',
// 'mootools-more.js',
// 'modal.js',
// 'ajax-chosen.min.js',
// 'tabs-state.js',
// 'frontediting.js',
// 'html5fallback.js',
// 'jui/js/bootstrap.min.js',
// 'jquery.min.js',
'jui/js/',
'system/js/',
// 'text/javascript'
);
foreach ($doc->_scripts as $key => $script) {
foreach ($search as $findme) {
if (stristr($key, $findme) !== false) {
unset($doc->_scripts[$key]);
}
}
}
foreach ($doc->_script as $key => $script) {
if (stristr($key, 'text/javascript') !== false) {
unset($doc->_script[$key]);
}
}
}
}