Joomla 3.X -从标题中删除工具提示脚本


Joomla 3.X - Remove tooltip script from header?

我试图从我的自定义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')。这个函数添加你的代码。

你可以:

肮脏的方法:进入libraries'cms'html'bootstrap.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');插入到任何组件的某个地方。

禁用Bootstrap Plugin

用下面的代码创建一个系统插件。

第一个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]);
            }
        }
    }
}