当前位置:网站首页 > 软件教程 > 正文

dedecms动态模板类标签使用方法

作者:admin发布时间:2021-11-02分类:软件教程浏览:评论:0


导读:dedecms动态模板类标签使用方法核心类文件include/dedetemplate.class.php用途:用于非核心模块的动态页面或列表页的模板解析,如:member/content_list.php,通常是在datalistcp.class.php中使用,这个类在动态运行的情况下,由于本身是把模板编译成PHP的,因此性能上

dedecms动态模板类标签使用方法
关键类文档
include/dedetemplate.class.php
主要用途:用以单核心控制模块的动态性网页页面或目录页的模版分析,如:member/content_list.php ,一般是在 datalistcp.class.php 中应用,这一类在动态性加载的情形下,因为自身是把模版编写出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(物理学相对路径的文件夹名称);


二.模版标识英语的语法

1.标识通用性特点
(1) 短标识
{dede:tagname.name/}
相当于
{dede:tagname name='' /}
(2) 块标识
{dede:tagname}
循环系统编码
{/dede:tagname}


2.标识的实际英语的语法及相匹配的PHP编码
(1) 配备自变量
{dede:config name='' value=''/}
配备自变量能够 在加载模版后根据 $tpl->GetConfig($name) 得到,仅做为配备,没有模版中表明。

(2) 短标识 

{dede:global.name/}   外界自变量      相当于 <?php echo $name; ?>
{dede:var.name/}      var二维数组       相当于 <?php echo $_vars['name']; ?>
{dede:field.name/}    field二维数组     相当于 <?php echo $fields['name']; ?>
{dede:cfg.name/}      系统设置自变量  相当于 <?php echo $cfg_name; ?>

充分考虑大部分状况下都是会在涵数或类中启用模版,因而 $_vars.$fields 二维数组务必申明为 global 二维数组,不然模板引擎没法得到它的值进而造成造成不正确。

(3) 随意启用块标识
{tag:blockname bind='GetArcList' bindtype='class'}
循环系统编码
{/tag:blockname}

必需特性:
bind       数据库来源于涵数
bindtype   函数类型,默认设置是 class 可选择为 sub
rstype     回到結果种类,默认设置是 array ,选择项为 string

自定义函数文件格式务必为 function(array $atts,object $refObj, array $fields);
在沒有特定 bind 关联的涵数的情形下,默认设置偏向 MakePublicTag($atts,$tpl->refObj,$fields) 统一管理方法,这一涵数储放在 cls_dede_tplinc.php 。

(4) 固定不动块标识

[1] datalist
从关联类友元函数GetArcList中获得二维数组并輸出
{dede:datalist}
循环系统编码
{/dede:datalist}
解析xml一个二给维二维数组,数据库是确定的,只可用用类启用。
相当于 
{tag:blockname bind='GetArcList' bindtype='class' rstype='arrayu'}
循环系统编码
{/tag:blockname}

[2] label
从关联涵数中获得字符串数组值并輸出
相当于 {tag:blockname bind='func' bindtype='sub' rstype='string'/}

[3] pagelist

从关联类友元函数GetPageList中获得字符串数组值并輸出
相当于 {tag:blockname bind='GetPageList' bindtype='class' rstype='string'/}

(5) include 英语的语法
{dede:include file=''/}
{dede:include filename=''/}

(6) php 代码块
{dede:php
php 编码
/}

{dede:php}
php代码
{/dede:php}

(7) if 标准
仅适用 if ,else ,else 立即用{else}表明,但不兼容{else if}那样的英语的语法 ,一般提议模版中不能应用太繁杂的标准英语的语法,假如的确有必须,能够 立即应用 php 英语的语法。

{dede:if 标准} a-block  {else} b-block {/dede:if}

标准中容许应用 var.name . global.name . field.name.cfg.name 表明根据的自变量。

如:
{dede:if field.id>10 }
{/dede:if}

(8) 解析xml一个 array 二维数组

{dede:array.name}
  {dede:key/} = {dede:value/}
{/dede:array}

各种各样英语的语法的实际编译程序后的编码,可查询 dede-template-class.php 的 function CompilerOneTag(&$cTag)。

块启用实例编码:
1.实例一
{tag:datalist timeformat=""}
  <tr>
    <td class='col1'>
      <div>?<a href='{tag:field.arcurl/}'>{tag:field.title/}</a></div>
      <!--div class='descriptions'>&nbsp;&nbsp;&nbsp;&nbsp;{tag:field.description function="CnSubstr(@me,150)"/}...</div-->
    </td>
    <td class='col2'>{tag:field.formattime/}</td>
  </tr>
{/tag:datalist}
编译程序后的编码
<?php
$atts = array();
$atts['tagname'] = 'datalist';
$atts['timeformat'] = '';
$blockValue = $this->refObj->GetArcList($atts,$this->refObj,$fields); 
foreach( $blockValue as $key=>$fields )
{
?>
  <tr>
    <td class='col1'>
      <div>?<a href='<?php echo $fields['arcurl']; ?>'><?php echo $fields['title']; ?></a></div>
      <!--div class='descriptions'>&nbsp;&nbsp;&nbsp;&nbsp;<?php echo CnSubstr($fields['description'],150); ?>...</div-->
    </td>
    <td class='col2'><?php echo $fields['formattime']; ?></td>
  </tr>
<?php
}
?>
2.实例二
{tag:article sort='new' titlelen='36' row='10'}
   <dd>[{tag:field.typename/}]<a href="{tag:field.arcurl/}">{tag:field.title function="CnSubstr(@me,24)"/}</a></dd>
{/tag:article}

编译程序后的编码

<?php
$atts = array();
$atts['tagname'] = 'article';
$atts['sort'] = 'new';
$atts['titlelen'] = '36';
$atts['row'] = '10';
$blockValue = MakePublicTag($atts,$this->refObj,$fields); 
if(is_array($blockValue) && count($blockValue) > 0){
foreach( $blockValue as $key=>$fields )
{
?>
   <dd>[<?php echo $fields['typename']; ?>]<a href="<?php echo $fields['arcurl']; ?>"><?php echo CnSubstr($fields['title'],24); ?></a></dd>
<?php
}
}
?>

标签:dedecms


欢迎 发表评论: