手动控制Joomla中的标记

时间:2013-11-01 04:32:46

标签: joomla template-engine joomla3.1

有没有办法在Joomla 3.1中手动配置网站的<head>部分的内容?我想将模板系统用于整个页面标记,包括<html></html>之间的所有内容。

我刚读过这篇文章:http://forum.joomla.org/viewtopic.php?f=466&t=230787,我对这一回应感到惊讶。当然这是模板/数据分离101.这是否已在最新的Joomla版本中得到修复?

3 个答案:

答案 0 :(得分:1)

如果您计划进行模板开发,并且需要将所有模板数据与Joomla库或核心文件(头部)分开。

通常,头部包含将像

一样工作
<jdoc:include type="head" />

它加载来自库libraries\joomla\document\html\renderer\head.php

的内容

如果要覆盖头部内容,可以为任务创建一个模块。 只需创建一个模块并包含该模块而不是此模块,确保将所有必需的代码添加到工作$document类中,否则它会错过Joomla关于document class

的许多功能

答案 1 :(得分:0)

正如Jobin的答案所解释的那样,通常是,你可以使用<jdoc:include type="head" />标签来包含头数据,但是如果你想要更多地控制它,你可以使用{ {1}}。

模板PHP中的示例代码:

JDocument

这将为您提供JDocument 通常打印的数据数组,以便您可以完全选择要打印的内容和方式。

答案 2 :(得分:0)

为了从CDN加载jQuery并将其放在脚本列表之上,我在$ doc = JFactory :: getDocument()之后做了一个小补丁;它直接在$ this对象内操作头数组,如下所示:

$my_jquery    = "//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js";
$my_jquery_ui = "//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js";
$my_jquery_cx = $this->baseurl."/media/jui/js/jquery-noconflict.js ";

foreach($this->_scripts as $k=>$v) {
// put own jquery.conflict && jquery-ui && jquery on top of list
    if( strpos($k,'jquery.min.js')) {
        unset($this->_scripts[$k]);

        $r = array( $my_jquery_cx => $v);
        $this->_scripts = $r + $this->_scripts;

        $r = array( $my_jquery_ui => $v);
        $this->_scripts = $r + $this->_scripts;

        $r = array( $my_jquery => $v);
        $this->_scripts = $r + $this->_scripts;
    }
    else if( strpos($k,'jquery.ui.min.js')) {
        unset($this->_scripts[$k]);
    }
    else if( strpos($k,'jquery-noconflict.js')) {
        unset($this->_scripts[$k]);
    }
}

用templateDetails.xml文件中的可编辑配置参数替换$ my_jquery_xxx