内置标签[2]
一、遍历循环
ThinkPHP 内置标签提供了 Volist 标签、Foreach 标签和 For 标签。
在 Home/controller/UserController.class.php 中插入一下代码:
1 class UserController extends Controller { 2 public function index() { 3 $user = M('User'); 4 $this->assign('data',$user->select()); 5 $this->display(); 6 } 7 }
Volist 标签:通常用于查询数据集的结果输出,通过 select()方法返回的是一个二
维数组,可以直接使用 volist 标签进行输出。
然后在 View/User/index.html 中的代码:
1 <ul> 2 <volist name="data" id="arr"> 3 <li>{$arr.id}--${$arr.user}--${$arr.email}</li> 4 </volist> 5 </ul>
PS:这里的 name="data"中的 data 是控制器给模版定义的数据变量,要对应;这里
的 id="arr"中的 arr 是将要遍历循环的数组名,可以自定义。
得到的结果为在浏览器中输出为:
offset 从第几条开始,起始值 0,length 共多少条
1 <ul> 2 <volist name="data" id="arr" offset="2" length="10"> 3 <li>{$arr.id}--${$arr.user}--${$arr.email}</li> 4 </volist> 5 </ul>
mod 求当前余数,当前 index 除以 2 余 1,输出偶数
1 <ul> 2 <volist name="data" id="arr" mod="2"> 3 <eq name="mod" value="1"> 4 <li>{$arr.id}--${$arr.user}--${$arr.email}</li> 5 </volist> 6 </ul>
因为数据库开始是从0开始,所以除以2余1的为偶数
没有数据的情况下使用 empty 填充
1 <ul> 2 <volist name="data" id="arr" empty="没有任何数据"> 3 <li>{$arr.id}--${$arr.user}--${$arr.email}</li> 4 </volist> 5 </ul>
empty 属性不支持 HTML 直接输入,但可以通过变量输出
但可以在 Home/controller/UserController.class.php 中设定:
1 class UserController extends Controller { 2 public function index() { 3 $user = M('User1'); 4 $this->assign('empty','<span style="color:red">没有任何数据</span>'); 5 $this->assign('data',$user->select()); 6 $this->display(); 7 } 8 }
然后在 View/User/index.html 中的代码为:
1 <ul> 2 <volist name="data" id="arr" empty="$empty"> 3 <li>{$arr.id}--${$arr.user}--${$arr.email}</li> 4 </volist> 5 </ul>
注意这时的ematy的属性是从 Home/controller/UserController.class.php 中继承过来的 , empty="$empty" 。
通过 key 输出循环遍历的变量
1 <ul> 2 <volist name="data" id="arr" key="k"> 3 <li>{$k}--{$arr.id}--${$arr.user}--${$arr.email}</li> 4 </volist> 5 </ul>
输出的结果为:
没有指定 k,也可以用 i 变量输出
1 <ul> 2 <volist name="data" id="arr" > 3 <li>{$i}--{$arr.id}--${$arr.user}--${$arr.email}</li> 4 </volist> 5 </ul>
结果和通过 key 输出循环遍历的变量的结果是一样的。
key 变量,可以直接输出索引值,从 0 开始
1 <ul> 2 <volist name="data" id="arr" > 3 <li>{$key}--{$arr.id}--${$arr.user}--${$arr.email}</li> 4 </volist> 5 </ul>
Foreach 标签和 Volist 标签类似,只不过 Foreach 标签更加简单,没有额外属性。
1 <ul> 2 <foreach name="data" item="arr" > 3 <li>{$arr.id}--${$arr.user}--${$arr.email}</li> 4 </foreach> 5 </ul>
主要注意的是,这里是 item="arr" ,不再是 id="arr"
foreach只支持 key 属性,但{$key}变量支持,两个的结果是一样的
支持{$key}变量
1 <ul> 2 <foreach name="data" item="arr" > 3 <li>{$key}--{$arr.id}--${$arr.user}--${$arr.email}</li> 4 </foreach> 5 </ul>
支持key属性
1 <ul> 2 <foreach name="data" item="arr" key="k" > 3 <li>{$k}--{$arr.id}--${$arr.user}--${$arr.email}</li> 4 </foreach> 5 </ul>
For标签就是简单的循环标签
从 1 到 99 循环
1 <for start="1" end="100"> 2 {$i}<br/> 3 </for>
这里不是1到100,而是1到99
除了start和end必须值,还有三个可选值。comparison是大于还是小于,默认值为lt
(<);name是循环变量名,默认值为i;step是步进值,默认为1。
1 <for start="1" end="100" comparison="lt" step="3" name="b"> 2 {$b}<br/> 3 </for>
三.其他标签
ThinkPHP 模版中还有一些其他标签。
在模版中定义变量,value 值可以为变量($user)或系统变量($Think.get.user)
1 <assign name="var" value="124" /> 2 {$var}
这时输出结果为: 124 ;
$Think.get.user 可以从url的最后中的user的值来获取,这个在原先讲过,这里就不赘述了。
在模版中定义常量,value 值可以为变量($user)或系统变量($Think.get.user)
1 <define name="MY_NAME" value="563" /> 2 {$Think.const.MY_NAME}
这时输出结果为: 563 ,需要注意的是,这时候不能在输出的时候直接用 $MY_NAME ,直接用这个的话没有任何输出结果。
import 导入标签可以智能的导入 js 和 css 文件
常规引入方法,在 View/User/index.html 中的引入为:
1 <html> 2 <head></head> 3 <script type="text/javascript" src="__PUBLIC__/js/index.js"></script> 4 <link rel="stylesheet" type="text/css" href="__PUBLIC__/css/index.css"/> 5 <body> 6 </body> 7 </html>
这里的 __PUBLIC__ 就是主目录下的public文件夹,如下图:
使用 import 导入,js 和 css 是目录
1 <html> 2 <head></head> 3 <import type="js" file="js.index" /> 4 <import type="css" file="css.index" /> 5 <body> 6 </body> 7 </html>
file里的第一个js是public下的js文件夹,后面那个index是js文件的名字,不用带上js这个后缀名
使用 import 导入,basepath 修改默认路径
1 <html> 2 <head></head> 3 <import type="js" file="js.index" basepath="./Common" /> 4 <import type="css" file="css.index" basepath="./Common" /> 5 <body> 6 </body> 7 </html>
load 加载标签可以智能的加载 js 和 css 文件
1 <html> 2 <head></head> 3 <load href="__PUBLIC__/js/index.js" /> 4 <load href="__PUBLIC__/css/index.css" /> 5 <body> 6 </body> 7 </html>
系统还提供了专用 js 和 css 标签,专门用于加载
1 <html> 2 <head></head> 3 <js href="__PUBLIC__/js/index.js" /> 4 <css href="__PUBLIC__/css/index.css" /> 5 <body> 6 </body> 7 </html>
PHP 代码可以和标签在模版文件中混合使用,可以在模版文件里面书写任意的 PHP 语句代码。
使用php标签:
1 <html> 2 <head></head> 3 4 <body> 5 6 <php> 7 $a=1; 8 $b=2; 9 echo $c=$a+$b; 10 </php> 11 12 </body> 13 </html>
使用php语法:
1 <html> 2 <head></head> 3 4 <body> 5 6 <?php 7 $a=1; 8 $b=2; 9 echo $c=$a+$b; 10 ?> 11 12 </body> 13 </html>
这两个输出的结果都是直接为“3”。
如果想原样输出标签极其内容,可以使用 literal 标签
1 <html> 2 <head></head> 3 4 <body> 5 6 <literal> 7 <php>echo 123;</php> 8 </literal> 9 10 </body> 11 </html>
这时输出结果为: echo 123; 为什么没有连 <php></php> 一起输出呢?因为这里 <php></php> 是相当于标签来用的。