dedetemplate.class.php 静态模板类
中心类文件include/dedetemplate.class.php
用处:用于非中心模块的静态静态页面或列表页的模板分析,如 :member/content_list.php ,模板但凡是静态在 datalistcp.class.php 中独霸 ,这个类在静态运转的模板气候下,因为本身是静态把模板编译成PHP的 ,是模板以功用上会优级于旧的分析类 ,这浅近例将在将来版本中作为通用的静态编制 。
1、模板独霸编制:
$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、标识表记标帜通用特点
(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}
遍历一个二给维数组,数据源是结实的 ,只合用用类调用 。
齐截于
{ 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) 遍历一个 array 数组
{ dede:array.name}
{ dede:key/} = { dede:value/}
{ /dede:array}
各类语法的具体编译后的代码,可搜检 dede-template-class.php 的 function CompilerOneTag(&$cTag)。
块调用示例代码 :
1、示例一
{ tag:datalist timeformat=""}<br />
<tr><br />
<td class='col1'><br />
<div>?<a href='{ tag:field.arcurl/}'>{ tag:field.title/}</a></div><br />
<!--div class='descriptions'> { tag:field.description function="CnSubstr(@me,150)"/}...</div--><br />
</td><br />
<td class='col2'>{ tag:field.formattime/}</td><br />
</tr><br />
{ /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>
<div>?<a href='<?php echo $fields['arcurl']; ?>'><?php echo $fields['title']; ?></a></div>
<!--div> <?php echo CnSubstr($fields['description'],150); ?>...</div-->
</td>
<td><?php echo $fields['formattime']; ?></td>
</tr>
<?php
}
?>
2、示例二
{ tag:article sort='new' titlelen='36' row='10'}<br />
<dd>[{ tag:field.typename/}]<a href="{ tag:field.arcurl/}">{ tag:field.title function="CnSubstr(@me,24)"/}</a></dd><br />
{ /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
}
}
?>
