🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[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标签来直接书写代码。