我试图从我的自定义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文件本身删除它
某个组件/模块/插件正在调用函数JHTML::_('behavior.tooltip')。这个函数添加你的代码。
你可以:
肮脏的方法:进入librariescmshtmlbootstrap.php并在tooltip()方法下更改文件。但请记住,这是一个核心文件,因此升级可以覆盖您的更改。
干净的方法,找到添加此代码的组件并删除或更改它。
好运您必须手动解析$doc->_script
。$doc->_scripts
数组包含链接到另一个源的脚本,而$doc->_script
用于脚本声明,如工具提示。
我设法摆脱嵌入javascript使用以下代码在我的模板的index.php文件:
unset($this->_script['text/javascript']);
免责声明:我不是PHP开发人员,所以使用上面的代码风险自负:)
在你的web根index.php(不是模板,http://domain.com/index.php)的末尾替换$app->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之外,您还可以整理输出,删除指向模块的链接等。
我也用它来做一些事情,比如改变网站的版权年份。在模块位置,我将当前年份引用为"{year}",然后添加另一个str_replace,执行以下操作:
$buffer = str_replace('{year}',date('Y'),$buffer);
答对了,总是显示当年。
享受…
基于Joomla文档,需要考虑两点:
a)在下面的代码中,你实际上是启用/包括bootstrap和jquery:# unset frameworks
JHtml::_('bootstrap.framework',false);// including bootstrap!
JHtml::_('jquery.framework',false);// including jquery!
当bootstrap被启用时,joomla会自动启用jquery,如果joomla启用了jquery, joomla会自动启用tooltip。
不要调用这些函数。您使用的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核心文件。这是最坏的做法。
p。对于那些提到工具提示脚本被插入,但他们没有在$doc
中找到它的人来说,这是因为$doc
不包含内联脚本。
我已经遇到了这个问题,我使用的是Joomla 3。如果这是你的情况,那么你可以这样解决它:Joomla 3自带jQuery,所以如果自己添加Joomla,可能会产生这个问题。还要确保在<jdoc:include type="head" />
上包含jQuery。如果有必要的话,可以把它包括进去。但我不建议这样做。希望对大家有所帮助
当我用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中。所以我得到错误"function tooltip not found"。
我通过在模板的JS文件中添加空函数来解决这个问题。
jQuery.fn.tooltip = function (option) { };
有一个可用的Joomla Plugin,它可以取消Bootstrap设置,并删除工具提示函数片段,这是由JHtml::_('behavior.tooltip');
插入到任何组件的某个地方。
用下面的代码创建一个系统插件。
第一个foreach循环unset
将.js
文件添加到头部。下一个foreach循环unset
是注入到<script>
标记中的js
代码。
有两个单独的属性包含脚本_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]);
}
}
}
}