如何在PHP </jdoc:include>中后处理<jdoc:include type =“head”>

时间:2014-06-24 11:57:51

标签: php joomla joomla3.0 joomla-extensions

初始问题:

我使用的是一个特殊的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包含的内容。傻我。

那么我该如何减少这个问题呢?

3 个答案:

答案 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,您可以编辑它而不是创建替换相当核心文件的覆盖。

如果你不想编辑原始插件,那么创建一个可以捕获各种系统plugintriggers/events也很容易。 Joomla Doc'sPlugin Development上有一个完整的类别。

我会想象一个System插件处理渲染或头部事件将成为陷阱的地方,即onAfterRenderonBeforeRenderonBeforeCompileHead

或者你也可以试试像这样的插件&#34; Skyline Script Remover&#34;来自Joomla Extension directory中的this search