初始问题:
我使用的是一个特殊的Joomla插件,它在很多方面都非常出色。但是,它将一堆Javascript添加到我不想要的<head>
元素中。 (我绝不是在哲学上反对使用Javascript的插件。它只是插件的Javascript输出很糟糕。在一般情况下也许并不坏,但它打破了我试图做的事情我的网站。无论如何,我正在切断。我会把它控制在......)
所以我的解决方案是我想控制<jdoc:include type="head" />
在我的页面中包含的内容。我想删除那个糟糕的Javascript。但是如何?
我的第一次尝试:
如果不是关于Joomla,我对PHP非常了解,我最初的想法是......&#34;啊哈!输出缓冲!&#34;
我在<?php ob_start(); ?>
之前将<jdoc:include type="head" />
添加到了我的模板中,之后又做了一些ob_get_contents()
内容。但是,当然,这只是字面上捕获字符串'<jdoc:include type="head" />'
。它只是晚一点;在模板运行完毕后,将处理jdoc包含的内容。傻我。
那么我该如何减少这个问题呢?
答案 0 :(得分:3)
要阻止输出javascript-Tags,您必须在$this->_scripts
之前在模板中取消设置<jdoc:incldue type="head" />
的正确成员。
例如,如果Joomla头添加<script type="text/javascript" src="/media/jui/js/jquery.min.js"></script>
,则在它之前添加以下php代码:
unset($this->_scripts['/media/jui/js/jquery.min.js']);
尝试var_dump($this->_scripts
);看到其中的所有成员。
答案 1 :(得分:1)
回答我自己的问题;我在these lines使用了一些东西。
首先,将/libraries/joomla/document/html/renderer/head.php
复制到/templates/MYTEMPLATE/renderer_head.php
。
然后更改fetchHead
中的/templates/MYTEMPLATE/renderer_head.php
方法以取消我不想要的部分。
最后,在/templates/MYTEMPLATE/index.php
中,在顶部附近添加以下行:
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'renderer_head.php';
答案 2 :(得分:0)
鉴于您已经了解PHP&#34;我建议不要使用这样的黑客,因为它可能会在未来的Joomla更新中中断。
所有插件都是php
,您可以编辑它而不是创建替换相当核心文件的覆盖。
如果你不想编辑原始插件,那么创建一个可以捕获各种系统plugin的triggers/events也很容易。 Joomla Doc's在Plugin Development上有一个完整的类别。
我会想象一个System
插件处理渲染或头部事件将成为陷阱的地方,即onAfterRender
,onBeforeRender
或onBeforeCompileHead
或者你也可以试试像这样的插件&#34; Skyline Script Remover&#34;来自Joomla Extension directory中的this search。