8

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

4

9 回答 9

4

某些组件/模块/插件正在调用函数 JHTML::_('behavior.tooltip')。并且该功能添加您的代码。

你可以做:

肮脏的方法:转到libraries\cms\html\bootstrap.php 并在方法tooltip() 处更改文件。但请记住这是一个核心文件,因此升级可以覆盖您的更改。

干净的方法,找到添加此代码的组件并删除或更改它。

祝你好运

于 2013-05-25T09:15:02.700 回答
3

您必须手动解析$doc->_script. 该$doc->_scripts数组包含链接到另一个源的脚本,而$doc->_script用于像工具提示这样的脚本声明。

于 2013-05-24T00:49:04.387 回答
3

我设法在模板的 index.php 文件中使用以下代码摆脱了嵌入的 javascript:

unset($this->_script['text/javascript']);

免责声明:我不是 PHP 开发人员,因此使用上述代码需要您自担风险:)

于 2013-09-03T12:13:28.437 回答
3

在您的网络根目录 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);

Bingo,总是显示当前年份。

享受...

于 2015-03-01T22:15:57.867 回答
2

根据Joomla 文档,需要考虑两件事:

a) 在下面的代码中,您实际上是启用/包括引导程序和 jquery:

# unset frameworks
JHtml::_('bootstrap.framework',false);// including bootstrap!
JHtml::_('jquery.framework',false);// including jquery!

当 bootstrap 启用时,joomla 会自动启用 jquery,如果 joomla 启用 jquery,joomla 会自动启用 tooltip。

只是不要调用这些函数。您使用的unset将正确删除引导程序和 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不包含内联脚本。

于 2014-11-30T15:58:36.957 回答
1

我已经遇到过这个问题,我正在使用 Joomla 3。如果是你的情况,那么你可以通过这样做来解决它:Joomla 3 自带 jQuery,所以通过自己添加 Joomla,这可能会产生问题。还要确保将 jQuery 包含在<jdoc:include type="head" />. 如果你有必要想要包括它。但我不推荐这个。希望这可以帮助

于 2014-04-16T13:08:59.597 回答
1

当我构建一个只有 HTML5、CSS3 和一些用于效果的小型 jQuery 插件的 Joomla 模板/站点时,我遇到了同样的问题。仅仅为了显示一些我也根本没有使用的工具提示而包含繁重的 Bootstrap 是不值得的。

虽然我已经从 JDocument 中取消了 media/jui/js/bootstrap.min.js 但是这些代码行

jQuery(document).ready(function(){
    jQuery('.hasTooltip').tooltip({"html": true,"container": "body"});
});

仍然由库/cms/html/bootstrap.php 附加。所以我收到错误“找不到功能工具提示”。

我通过在模板的 JS 文件中添加一个空函数来解决这个问题。

jQuery.fn.tooltip = function (option) { };
于 2016-02-20T15:03:43.240 回答
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]);
            }
        }

    }
}
于 2018-11-21T21:56:08.663 回答
0

有一个可用的 Joomla 插件可取消设置 Bootstrap 并删除工具提示功能片段,该片段插入JHtml::_('behavior.tooltip');任何组件中的某个位置。

请参阅此处:禁用引导插件

于 2016-05-27T12:56:04.420 回答