初始问题:
我正在使用一个特殊的Joomla插件,它在很多方面都很好。然而,它添加了一堆Javascript到我的<head>
元素,我不希望。(我绝不是从哲学上反对使用Javascript插件。只是插件的Javascript输出很糟糕。也许在一般情况下还不错,但它破坏了我试图用我的网站做的事情。不管怎样,我要跑题了。我会控制它的
所以我的解决方案是,我想控制什么<jdoc:include type="head" />
包含在我的页面。我想去掉Javascript中不好的部分。但如何?
我的第一次尝试:
如果不了解Joomla,我对PHP相当了解,我最初的想法是…"啊哈!输出缓冲!"
我在<jdoc:include type="head" />
之前添加了<?php ob_start(); ?>
到我的模板,然后做了一点ob_get_contents()
的东西。当然,这只是捕获字符串'<jdoc:include type="head" />'
。这只是后来的事;在模板完成运行之后,jdoc包含将被处理。愚蠢的我。
那么我该怎么把这些垃圾去掉呢?
为了防止javascript-Tags的输出,您必须在<jdoc:incldue type="head" />
之前取消模板中$this->_scripts
的正确成员。例如,如果Joomla头添加了<script type="text/javascript" src="/media/jui/js/jquery.min.js"></script>
,那么在它之前添加以下php代码:
unset($this->_scripts['/media/jui/js/jquery.min.js']);
Try var_dump($this->_scripts
;查看其中的所有成员
回答自己的问题;
首先,复制/libraries/joomla/document/html/renderer/head.php
到/templates/MYTEMPLATE/renderer_head.php
。
然后改变/templates/MYTEMPLATE/renderer_head.php
中的fetchHead
方法来抑制我不想要的部分。
最后,在/templates/MYTEMPLATE/index.php
中,在顶部附近添加以下行:
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'renderer_head.php';
考虑到你"对PHP很了解",我建议不要使用这样的hack,因为它很可能在Joomla的未来更新中被破坏。
所有的插件都是php
,你可以编辑它,而不是创建一个覆盖来取代一个相当核心的文件。
如果你不想编辑原始插件,创建一个捕获各种系统触发器/事件的插件也很容易。Joomla Doc's有一个完整的插件开发类别。
我会想象一个System
插件,处理渲染或头部事件将是陷阱的地方,即onAfterRender
, onBeforeRender
或onBeforeCompileHead
或者你可以尝试这样一个插件"Skyline Script Remover"从Joomla扩展目录,在这个搜索中找到。