Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Joomla 3.X-从标题中删除工具提示脚本?_Php_Jquery_Joomla_Tooltip - Fatal编程技术网

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

Php Joomla 3.X-从标题中删除工具提示脚本?,php,jquery,joomla,tooltip,Php,Jquery,Joomla,Tooltip,我正在尝试从我的自定义joomla模板头中删除不需要的脚本,我已成功删除了除此之外的所有内容: <script type="text/javascript"> jQuery(document).ready(function() { jQuery('.hasTooltip').tooltip({}); }); </script> 如果有人能帮我删除工具提示javas

我正在尝试从我的自定义joomla模板头中删除不需要的脚本,我已成功删除了除此之外的所有内容:

<script type="text/javascript">
jQuery(document).ready(function()
                {
                    jQuery('.hasTooltip').tooltip({});
                });
  </script>

如果有人能帮我删除工具提示javascript,那就太棒了。哦,我不想接触核心文件,所以我正在尝试将其从template index.php文件本身中删除。

您必须手动解析
$doc->\u script
$doc->\u脚本
数组包含链接到另一个源的脚本,而
$doc->\u脚本
用于工具提示之类的脚本声明。

一些组件/模块/插件正在调用函数JHTML:::\('behavior.tooltip')。该函数用于添加代码

你可以做:

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

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


祝你好运

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

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

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

我已经遇到了这个问题,我使用的是Joomla 3。如果是您的情况,您可以通过以下方式解决: Joomla 3附带了jQuery,因此通过自己添加Joomla,这可能会产生问题。 还要确保在
上包含jQuery。如果有必要,请将其包括在内。但我不建议这样做。 希望这有助于

基于以下两个方面:

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

# unset frameworks
JHtml::_('bootstrap.framework',false);// including bootstrap!
JHtml::_('jquery.framework',false);// including jquery!
启用引导时,joomla会自动启用jquery,如果joomla启用了jquery,joomla会自动启用工具提示

只是不要调用这些函数。您使用的
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
不包含内联脚本。

在web root 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);
$buffer = str_replace('{year}',date('Y'),$buffer);
宾果,总是显示当前年份


享受…

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

虽然我已经从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) { };

有一个Joomla插件可用,它可以取消引导,还可以删除工具提示函数片段,该函数片段由
JHtml:::uuz('behavior.tooltip')插入任何组件中的某个位置


使用以下代码创建一个系统插件

第一个foreach循环
unset
s添加到头部的
.js
文件。下一个foreach循环
unset
s将
js
代码注入
标记中

包含脚本的两个单独属性是
\u script
&
\u 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]);
            }
        }

    }
}

我尝试过使用$doc->\u脚本,但它没有拾取工具提示代码-数组返回空。从生成JS代码片段的JHtmlBootstrap::tooltip()开始,逐步遍历代码,您将看到该代码片段设置为$doc->\u脚本。我现在不明白为什么你会得到一个空数组,但你找对了地方。我已经找到了它添加代码的地方,但我不想通过破解内核来删除它。我还尝试在模板索引文件的页眉和页脚中回显$doc->_脚本数组,但仍然一无所获。在3.4.0.Components调用JHtml::(('bootstrap.tooltip')中,似乎没有明确解决此问题的方法;(其中有很多)也会导致添加此代码。
$doc
也包含内联脚本。看看我的答案。
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]);
            }
        }

    }
}