zoukankan      html  css  js  c++  java
  • (转)模板引擎类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'/}

  • 相关阅读:
    Serverless 解惑——函数计算如何安装字体
    构建安全可靠的微服务 | Nacos 在颜铺 SaaS 平台的应用实践
    OAM v1alpha2 新版:平衡标准与可扩展性
    人工智能与阅读能力的关系研究
    Java Web每天学之Servlet的原理解析
    ThreadLocal类的简单使用
    JavaScript之DOM创建节点
    css浮动(float)及清除浮动的几种实用方法
    Apache Sentry部署
    Spark机器学习解析下集
  • 原文地址:https://www.cnblogs.com/wanshutao/p/4497539.html
Copyright © 2011-2022 走看看