模板引擎类dedetemplate.class.php使用说明【转自织梦官方】

1.概述

织梦的模板标签类似于XML格式,所有的模板都含有定界符,默认情况下是{dede:*}和{/dede:*},“*”代表模板标记名称。

一般情况下{dede:*}和{/dede:*}是成对出现的。

每个模板都会生成一个模板缓存文件,默认是在站点根目录data/tplcache目录。在模板调试的时候可以查看缓存中编译后的模板文件。

如果需要在开发中使用,则需要引用dedetemplate.class.php文件:

$tpl = new DedeTemplate(     模板对象实例名称,通常是‘tpl‘,     [模板存放目录(生成缓存时会存放在这个目录),     include语法默认引用目录]     );     通常情况下参数二和参数三是不必要的,如:     $tpl = new DedeTemplate(‘tpl‘);

如果在类文件中调用,应该加上设置:     $this->tpl->SetObject($this);     在一些块调用中默认将使用当前类的成员函数。

$tpl->LoadTemplate(模板的物理路径);

如果模板中带有 {dede:config name=‘‘ value=‘‘/}     可以在载入模板后,通过 $tpl->GetConfig($name) 获得这些变量的值。

显示页面或保存页面为文件     $tpl->Display();     $tpl->SaveTo(物理绝对路径的文件名);

模板中具体标签的使用可以查看本章节相关内容。

2.变量输出

在程序开发中,我们在程序处理中可以给变量赋值,但如何将其显示到模板中呢?这里我们来说明下:

    1.普通变量

例如我们这里有一个变量

$myvar = ‘DedeCMS‘;   $this->SetVar(‘myvar‘, $myvar);

我们可以在模板中使用:

{dede:var.myvar/}

{dede:var name=‘myvar‘/}

解析后的代码是<?php echo $GLOBALS[‘_vars‘][‘myvar‘]; ?>,同时我们可以在模板中看到输出效果。

以上是一个普通变量的输出,当然我们可以将数组传递到模板中去

    2.数组

我们可以通过SetVar()将数组在模板中解析,比如我们现在有一个数组:

$myarr = array(‘name‘=>‘DedeCMS‘,‘company‘=>‘DesDev INC.‘);

$this->SetVar(‘myarr‘, $myarr);

我们可以在模板中使用:

Name:{dede:var.myarr.name/} Company:{dede:var.myarr.company/} 或者通过:Company:{dede:var name=‘myarr.company‘/}来调用。不过我们推荐使用前者形式并    且需要整个程序模板标签写法保持统一。

上面的代码解析后是:

Name:<?php echo $GLOBALS[‘_vars‘][‘myarr‘][‘name‘]; ?> Company:<?php echo $GLOBALS[‘_vars‘][‘myarr‘][‘company‘]; ?>

需要注意的是,一些模板引擎中喜欢使用Assign这种形式来给模板标签变量赋值,DedeCMS也可以使用,用法和SetVar是一样的。

例如:$this->Assign(‘myvar‘, $myvar);

3.函数使用

一般标签有时候是很难完成开发制作需要的,织梦的模板引擎提供了一种处理标签的特殊方法:自定义函数。

通过自定义函数的处理,可以对解析后的标签赋予新的处理,但需要满足函数本身能够返回值。

标签格式为:

{dede:标记名称function=‘youfunction("参数一","参数二","@me")‘/}
其中 @me 用于表示当前标记的值,其它参数由你的函数决定是否存在,例如: {dede:field.pubdate function=‘strftime("%Y-%m-%d %H:%M:%S","@me")‘/}

比如说我们这里有一个变量,调用的是时间,我们通常保存在数据库中的时间都是10位的整数,但现实的时候需要将其解析为文本,这时候我们就需要通过特定的
函数来处理,这里我们的这个标签是:{dede:field.time/},在模板中输出内容是“1252458332”。

我们来查看一个函数:

//
返回格林威治标准时间 function MyDate($format=‘Y-m-d H:i:s‘,$timest=0) ...{ global
$cfg_cli_time; $addtime = $cfg_cli_time * 3600; if(empty($format))
...{ $format = ‘Y-m-d H:i:s‘; } return gmdate
($format,$timest+$addtime); }

这个函数将时间按照格式输出,默认格式是"Y-m-d H:i:s"。

我们将我们的标签进行处理。{dede:field.time function="MyDate(‘m-d‘,@me)"/}

我们可以看到输出结果:09-09

4. 系统变量

除了普通的一些变量之外,在系统开发中,模板常常还需要调用一些系统变量以及一些特殊的变量输出,本篇介绍如何在Dede模板中使用标签来调用这些系统变量。

1.配置变量config

配置变量可以在载入模板后通过 $tpl->GetConfig($name) 获得,仅作为配置,不在模板中显示。此变量直接提交到
this->tpCfgs 中,并会生成与模板对应的缓存文件 ***_config.php 文件(可以在tplcache中找到)。

例如我们在模板中设置:{dede:config.pagesize value=‘20‘/},这个是设置分页标签的分页数量为20。

我们将这个配置标签放到模板文件的最顶部,解析后发现模板中的列表显示就是每页显示20条内容。这个是因为在datalist类中对这个配置进行了解析处理。

if(isset($this->tpl->tpCfgs[‘pagesize‘])) ...{ $this->pageSize = $this->tpl->tpCfgs[‘pagesize‘]; }

 2.全局变量global

在系统中经常会调用全局变量,我们可以在模板中使用{dede:global name=‘varname‘/}来调用,这个变量同时也能够调用系统的一些配置变量。

比如我们调用系统配置中的模板路径,可以使用{dede:global.cfg_templeturl/}来调用。

当然你也可以赋值一些全局变量通过global标签来调用:

$GLOBALS[‘myglobal‘] = array(‘name‘=>‘DedeCMS‘,‘company‘=>‘DesDev INC.‘);

模板中使用:

{dede:global.myglobal.name/}进行调用。

我们可以通过print_r($GLOBALS);来查看全局变量并使用这个标签进行调用。同时这个变量也支持自定义函数

3.系统配置变量cfg

在上面的内容中就介绍了通过global标签输出系统配置,这里其实有专门的系统配置标签可以输出,我们可以在模板中使用
{dede:cfg.name/}来输出相应的配置,这个解析后的内容等同于:<?php echo $cfg_name; ?>。

考虑到大多数情况下都会在函数或类中调用模板,因此 $_vars、$fields 数组必须声明为 global 数组,否则模板引擎无法获得它的值从而导致产生错误。

4.对象object

在模板中可以使用{dede:object.name->att/}来调用对象的属性。解析后为:<?php echo $GLOBALS[‘name‘]->att; ?>

 5.固定块

这个标签是一个比较特殊的块处理标签,一般需要配合类进行使用。

1.datalist

从绑定类成员函数GetArcList中获取数组并输出 {dede:datalist} 循环代码 {/dede:datalist} 遍历一个二维数组,数据源是固定的,只适用用类调用。 等同于
{tag:blockname bind=‘GetArcList‘ bindtype=‘class‘ rstype=‘array‘} 循环代码 {/tag:blockname}

2.label 从绑定函数中获取字符串值并输出 等同于 {tag:blockname bind=‘func‘ bindtype=‘sub‘ rstype=‘string‘/}

3.pagelist

从绑定类成员函数GetPageList中获取字符串值并输出 等同于 {tag:blockname bind=‘GetPageList‘ bindtype=‘class‘ rstype=‘string‘/}

时间: 2024-11-05 06:41:18

模板引擎类dedetemplate.class.php使用说明【转自织梦官方】的相关文章

PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP

smarty模板引擎类简单工作原理 利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件.例如 模板文件中{$title} 利用正则表达式找到并替换成  <?php echo $this->vars['title'];?> 自定义 Smarty 模板引擎类 smarty.class.php页面 <?php /*  * 自定义Smarty模板引擎类  */         class Smarty{             priva

PHP中面向对象中的模板引擎类

<?php /** * 模版引擎类 */ class Tpl { //缓存目录 protected $cacheDir = './Cache/'; //模版目录 protected $tplDir = './Tpl/'; //保存变量的成员方法 protected $vars = []; //缓存有效期 protected $cacheLifeTime = 3600; //初始化成员属性 public function __construct($tplDir = null ,$cacheDir 

织梦解析模板之灵活应用视图类

初步对织梦cms进行了解,忍不住要动手试一试了.织梦cms也是采用mvc的设计模式,它的核心代码,大部分存在于include目录里.包括控制器. 模型.视图类.模板引擎.标签库.公用函数等.下面我们就简单的创建一个属于自己的php页面处理文件,在文件里,用织梦自身的模板引擎和视图,去解析我预先创建好的静态html文件.在此,我简单的写了如下几段代码: 第一步,创建自己的php页面处理文件,在这里,我在根目录下创建demo.php文件,文件内容如下: ? 1 2 3 4 5 6 7 8 9 10

Django基础,Day10 - template 模板引擎与路径设置

作为一个Web框架,Django需要一个方便的方式来生成动态的HTML.最常见的方法依赖于模板.模板包含所需的HTML输出的静态部分以及一些特殊的语法描述如何插入动态内容. Django框架后端默认支持自生内置的一套模板系统DTL(Django Template Language) 和 有名的Jinja2模板系统.当然,也可以从第三方模块中之前其他模板系统.如果没有特殊要求,建议使用Django自带的DTL模板系统,这也是django 1.8之前唯一可以的内置选项. TEMPLATE 默认配置

开发自己的模板引擎

自定义模板引擎类 MyTpl.class.php 1 <?php 2 class MyTpl 3 { 4 private $tpl_vars = array(); 5 //分配 6 public function assign($key,$value){ 7 $this->tpl_vars[$key] = $value; 8 } 9 public function display($tpl){ 10 $contents = file_get_contents($tpl); 11 foreach

php模板引擎原理

模板引擎实现的原理 访问php文件, php文件会去加载模板引擎,通过模板引擎去加载模板然后替换模板里面的变量 然后生成一个编译文件 最后将该编译文件导入 访问的php文件中输出 第二次访问的时候 如果 缓存文件存在或者没有被改动则直接 导入缓存文件 输出 否则重新编译 自定义的一个模板引擎 mytpl.class.php <?php class mytpl{ //指定模板目录 private $template_dir; //编译后的目录 private $compile_dir; //读取模

前端学PHP之自定义模板引擎

什么是网站模板?准确地说,是指网站页面模板,即每个页面仅是一个板式,包括结构.样式和页面布局,是创建网页内容的样板,也可以理解为已有的网页框架.可以将模板中原有的内容替换成从服务器端数据库中动态内容,目的是可以保持页面风格一致 PHP是一种HTML内嵌式的在服务器端执行的脚本语言,所以大部分PHP开发出来的Web应用,初始的开发模板就是混合层的数据编程.虽然通过MVC设计模式可以把程序应用逻辑与网页呈现逻辑强制性分离,但也只是将应用程序的输入.处理和输出分开,网页呈现逻辑(视图)还会有HTML代

(转)浅谈dedecms模板引擎工作原理及自定义标签

理解织梦模板引擎有什么意义?一方面可以更好地自定义标签.更多在于了解织梦系统,理解模板引擎是理解织梦工作原理的第一步.理解织梦会使我们写php代码时更顺手,同时能学习一些php代码的组织方式. 这似乎不是那么简单,如果你只想学习自定义标签,可以看一下“是否需要自定义标签”和““扩展标签””就够了. 一解析式引擎 如果你还没用过dedecms的标签,先用一下,也可以看一下“dedecms网页模板编写”.熟悉一下memberlist这个标签,下面会以这个标签为例. 织梦提供的模板分析引擎有解析式和编

smarty模板引擎原理解析

//php 控制器文件 <?php//引入模板引擎文件include("20130304.php");$smarty = new TinySmarty();$qq_numbers=array('a1'=>'12333','a2'=>'2222222','a3'=>'333333','a4'=>'3333333');$smarty->assign($qq_numbers);$smarty->assign('title','这是我的QQ号码');$