内置标签[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> 是相当于标签来用的。

原文地址:https://www.cnblogs.com/jacson/p/4508912.html