[TOC]
# 基础
## tc_include
tc_include是前台模板包含文件的方法,用于替换原来的include的标签,实现更多功能
用法:
```html
<tc_include file="Public:nav"/> <!--加载的是当前模板的Public/nav.html-->
<tc_include file="Public/nav"/> <!--加载的是当前模板的Public/nav.html-->
<tc_include file="Portal/sidebar"/> <!--加载的是当前模板的Portal/sidebar.html-->
<tc_include file="User/Profile/nav"/> <!--加载的是用户模板的User/Profile/nav.html-->
```
## foreach
forech标签
属性
`name`:表示数据源;
`item`:表示循环变量;
```html
<foreach name="list" item="vo" >
{$vo.name} {$key}
</foreach>
```
更改属性key的变量名:
```html
<foreach name="list" item="vo" key="k">
{$vo.name} {$k}
</foreach>
```
## volist
volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。 在控制器中首先对模版赋值:
```
$User = M('User');
$list = $User->limit(10)->select();
$this->assign('list',$list);
```
在模版定义如下,循环输出用户的编号和姓名:
```
<volist name="list" id="vo">
{$vo.id}:{$vo.name}<br/>
</volist>
```
volist标签的name属性表示模板赋值的变量名称,因此不可随意在模板文件中改变。id表示当前的循环变量,可以随意指定,但确保不要和name属性冲突,例如:
```
<volist name="list" id="data">
{$data.id}:{$data.name}<br/>
</volist>
```
支持输出查询结果中的部分数据,例如输出其中的第5~15条记录
```
<volist name="list" id="vo" offset="5" length='10'>
{$vo.name}
</volist>
```
输出偶数记录
```
<volist name="list" id="vo" mod="2" >
<eq name="mod" value="1">{$vo.name}</eq>
</volist>
```
Mod属性还用于控制一定记录的换行,例如:
```
<volist name="list" id="vo" mod="5" >
{$vo.name}
<eq name="mod" value="4"><br/></eq>
</volist>
```
为空的时候输出提示:
```
<volist name="list" id="vo" empty="暂时没有数据" >
{$vo.id}|{$vo.name}
</volist>
```
empty属性不支持直接传入html语法,但可以支持变量输出,例如:
```
$this->assign('empty','<span class="empty">没有数据</span>');
$this->assign('list',$list);
```
然后在模板中使用:
```
<volist name="list" id="vo" empty="$empty" >
{$vo.id}|{$vo.name}
</volist>
```
输出循环变量
```
<volist name="list" id="vo" key="k" >
{$k}.{$vo.name}
</volist>
```
如果没有指定key属性的话,默认使用循环变量i,例如:
```
<volist name="list" id="vo" >
{$i}.{$vo.name}
</volist>
```
如果要输出数组的索引,可以直接使用key变量,和循环变量不同的是,这个key是由数据本身决定,而不是循环控制的,例如:
```
<volist name="list" id="vo" >
{$key}.{$vo.name}
</volist>
```
模板中可以直接使用函数设定数据集,而不需要在控制器中给模板变量赋值传入数据集变量,如:
```
<volist name=":fun('arg')" id="vo">
{$vo.name}
</volist>
```
## php
php代码可以和标签在模板文件中混合使用,可以在模板文件里面书写任意的PHP语句代码 ,包括下面两种方式:
使用php标签
例如:
```
<php>echo 'Hello,world!';</php>
```
我们建议需要使用PHP代码的时候尽量采用php标签,因为原生的PHP语法可能会被配置禁用而导致解析错误。
使用原生php代码
```
<?php echo 'Hello,world!'; ?>
```
注意:php标签或者php代码里面就不能再使用标签(包括普通标签和XML标签)了,因此下面的几种方式都是无效的:
```
<php><eq name='name'value='value'>value</eq></php>
```
php标签里面使用了eq标签,因此无效
```
<php>if( {$user} != 'ThinkPHP' ) echo 'ThinkPHP' ;</php>
```
php标签里面使用了{$user}普通标签输出变量 ,因此无效。
```
<php>if( $user.name != 'ThinkPHP' ) echo 'ThinkPHP' ;</php>
```
php标签里面使用了 `$user.name` 点语法变量输出 ,因此无效。
>简而言之,在PHP标签里面不能再使用PHP本身不支持的代码。
如果设置了 `TMPL_DENY_PHP` 参数为 `true`,就不能在模板中使用原生的PHP代码,但是仍然支持PHP标签输出。
## if else
用法示例:
```
<if condition="($name eq 1) OR ($name gt 100) "> value1
<elseif condition="$name eq 2"/>value2
<else /> value3
</if>
```
在`condition`属性中可以支持`eq`等判断表达式,同上面的比较标签,但是不支持带有”>”、”<”等符号的用法,因为会混淆模板解析,所以下面的用法是错误的:
```
<if condition="$id < 5 ">value1
<else /> value2
</if>
```
必须改成:
```
<if condition="$id lt 5 ">value1
<else /> value2
</if>
```
除此之外,我们可以在condition属性里面使用php代码,例如:
```
<if condition="strtoupper($user['name']) neq 'THINKPHP'">ThinkPHP
<else /> other Framework
</if>
```
condition属性可以支持点语法和对象语法,例如: 自动判断user变量是数组还是对象
```
<if condition="$user.name neq 'ThinkPHP'">ThinkPHP
<else /> other Framework
</if>
```
或者知道user变量是对象
```
<if condition="$user:name neq 'ThinkPHP'">ThinkPHP
<else /> other Framework
</if>
```
由于`if`标签的`condition`属性里面基本上使用的是`php`语法,尽可能使用`判断标签`和`Switch标签`会更加简洁,原则上来说,能够用`switch`和`比较标签`解决的尽量不用`if标签`完成。因为`switch`和`比较标签`可以使用变量调节器和系统变量。如果某些特殊的要求下面,IF标签仍然无法满足要求的话,可以使用原生php代码或者PHP标签来直接书写代码。
- HBuilder扩展代码块
- Sublime扩展代码块
- 模板
- 基础
- 模板标签
- 前端组件
- 公共模板
- 进阶
- 前台模板
- 房产装修风格
- 博客类模板
- 企业站-监控模板
- 后台模板
- 漂亮的后台模板
- ThinkCMF 1.6 后台界面升级
- 新的模板
- 后台UI
- H+后台主题
- Ace Admin
- 信息系统(橙蓝)
- 阿里云UI
- 不错的网站
- 常见问题
- dedecms 模板修改为 newthink 模板目录的步骤
- 网站信息 新增条目方法
- 系统切换中英文
- 2.3 门户模板制作
- 文章列表页制作
- 文章内容页制作
- 页面制作
- 获取文章的各种方式
- 热门文章组件制作
- SEO制作
- 文章相册制作
- 文章列表推荐功能制作
- 文章列表置顶功能制作
- 面包屑制作
- 格式化