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

时间:2013-05-23 22:49:45

标签: php jquery joomla tooltip

我正在尝试从我的自定义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文件中删除。

9 个答案:

答案 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');在任何组件中某处插入的工具提示功能片段。

See here: Disable Bootstrap Plugin

答案 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]);
            }
        }

    }
}