视图所指的就是具体在MVC中V。视图主要的作用就是与用户进行具体的数据交互(将具体的内容信息输出即可)。对于视图一般也成为模板
视图创建
视图的创建规则
- TP建议将具体的视图模板存储到对应的模块中的View目录中。例如目前在后台Admin模块中需要使用到的一个模板。可以将具体的视图模板存储到Application/Admin/View
- TP建议根据具体的控制器在视图的View目录下创建同名的目录。例如目前在后台Admin模块中有一个叫做Test控制器。将具体的视图模板存储到Application/Admin/View/Test目录中
TP建议将具体的视图模板文件名称保持跟具体的方法名称一致。例如目前在后台Admin模块中有一个叫做Test控制器。在Test控制器下有一个叫做test方法,如果该方法需要使用模板。建议将的具体的模板名称取名叫test.html
视图渲染
视图宣染所指的其实就是将具体的视图模板进行输出显示在TP中有两个方法可以现实具体的视图的输出功能。分别为display跟fetch。对于display获取具体要输出的内容然后直接输出,fetch获取具体要输出的内容但是不会自动的输出。
display的使用
display不带任何参数
对于display方法不传递任何参数,TP会自动的定位到当前控制下的对应的同名方法的模板中。
指定当前控制器下的模板
创建add模板其他控制器下的模板
访问测试
- 指定其他模板
- 完整模板名称
display和fetch方法的区别
Display:获取具体的模板内容并且自动的输出内容
Fetch:获取获取的模板内容但是不会自动的输出内容。
对于上述的两个方法是在使用上是一模一样。
代码:
public function testF(){
$this->fetch('add');
}
查看具体的效果
目前没有任何的内容输出原因因为目前fecth方法没有自动的将具体的内容进行输出
修改方法
public function testF(){
$str =$this->fetch('add');
echo $str;
}
查看效果
对于想要完整的使用fetch方法来实现display的操作。可以通过使用fetch 与show的方法进行配合,I先通过使用fetch方法获取具体的内容。然后在交给show方法就可以完整的使用display方法的功能模板替换
为什么要使用模板替换功能
创建方法渲染模板
public function add(){
//display没有指定任何参数信息,宣染跟方法同名的模板文件
//View/Goods/add.html
$this->display();
}
处理模板文件
- 创建css样式表文件
创建存储资源的目录文件夹
创建具体的样式表
- 修改模板使用样式表文件
指定样式表
效果展示:
例如后期由于某种因素需要修改资源文件的目录情况。需要将所有的模板中资源文件地址进行修改。使用此方式就会非常麻烦。可以通过使用TP的模板替换技术只需要修改一处就可以实现所有的修改。
模板替换
- TP内置的模板替换规则
修改add模板增加内置的模板替换规则
查看具体的模板替换
- 自定义模板替换
模板变量赋值与显示
创建方法实现赋值
public function testshow(){
//代表的就是具体从数据库中获取到的动态数据
$msg = 'hello TP';
$data =array(
'name'=>'Tp',
'version'=>3.2
);
//实现赋值模板的方式一,对于此方法也是使用最多的一种方法.
//对于assign有两个参数,第一个对应的就是具体在模板中使用的变量名称
//第二个参数指定具体要赋值给模板的数据
$this->assign('msg',$msg);
//实现赋值模板的方式二 对于此方式使用量比较少。
//关于具体的属性名称具体在模板中使用的变量名称。
//具体属性值指定具体要赋值给模板的数据
$this->data=$data;
$this->display();
}
创建模板显示具体的数据
- 查看具体模板显示内容的配置参数
系统变量
系统变量就是TP 内置的一个变量。对于系统变量可以在模板中直接使用,不需要进行任何的赋值操作。对于系统变量可以输出的内容包括TP内容配置项信息,TP或者PHP内置的常量,PH超全局数据($_GET,$_POST等)。对于在模板中使用系统变量时都是“{$Think”开头
创建方法渲染视图
public function testsys(){
$this->display();
}
创建模板显示具体的系统变量内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
输出TP的配置项信息{$Think.config.DEFAULT_MODULE}<br/>
输出TP的内置常量{$Think.CONTROLLER_NAME}<br/>
输出PHP的内置常量{$Think.PHP_VERSION}<br/>
输出PHP的超全局常量{$Think.get.id}<br/>
</body>
</html>
模板函数
模板函数所指的就是在模板中使用某一个函数(php_内置的函数或者TP的公共函数)将具体的数据转换成为其他格式。
创建方法渲染模板
public function testfunc(){
$time=time();
$this->assign('time',$time);
$this->display();
}
创建模板使用内部函数进行格式化
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
1. 使用PHP原生代码实现转换操作:<?php echo date('Y-m-d H:i:s');?><br/>
2. 使用TP模板引擎来实现具体转换:{$time|date='Y-m-d H:i:s',###}<br/>
3. 特殊写法:{:date('Y-m-d H:i:s',$time)}<br/>
4. 使用U函数生成连接地址:{:U('index','id=4')}
</body>
</html>
查看具体效果
模板运算符
例如目前有一个商品列表数据信息,在模板显示时需要显示出具体每件商品的总价格
基础的算数运算
在TP的模板中可以支持使用加、减、乘、除、取模等操作
创建方法
public function jisuan(){
$this->assign('a',10);
$this->assign('b',2);
$this->display();
}
创建模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
a+b={$a+$b}<br/>
a-b={$a-$b}<br/>
a*b={$a*$b}<br/>
a/b={$a/$b}<br/>
</body>
</html>
查看效果
数组的运算
修改计算
public function jisuan(){
$this->assign('a',10);
$this->assign('b',2);
$data=array(
'price'=>100,
'num'=>3
);
$this->assign('data',$data);
$this->display();
}
创建模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
a+b={$a+$b}<br/>
a-b={$a-$b}<br/>
a*b={$a*$b}<br/>
a/b={$a/$b}<br/>
数组计算{$data['price']*$data['num']}
</body>
</html>
内置标签
foreach标签
查看手册
创建方法渲染模板
public function test1(){
$data=array(
'a'=>array('name'=>'tp1','version'=>5.0),
'b'=>array('name'=>'tp2','version'=>3.2),
);
$this->assign('data',$data);
$this->display();
}
创建模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<foreach name="data" item="vo" key="k">
下标 {$k} ----name:{$vo.name}-----version:{$vo.version}<br/>
</foreach>
</body>
</html>
if标签
使用的方法
说明:对于if标签指定具体的判断条件时,可以通过使用and和or来指定具体的条件的“并且”和”或者”关系。在指定具体的比较的条件时是不能直接使用=、>、<。如果需要判断就必须使用对应的英文字母
修改test1方法
public function test1(){
$data=array(
'a'=>array('name'=>'tp1','version'=>5.0),
'b'=>array('name'=>'tp2','version'=>3.2),
);
$this->assign('data',$data);
$this->assign('day',2);
$this->display();
}
使用if标签
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<foreach name="data" item="vo" key="k">
下标 {$k} ----name:{$vo.name}-----version:{$vo.version}<br/>
</foreach>
<hr>
<if condition="$day eq 7">
复习代码
<elseif condition ="($day gt 1) and ($day lt 6)" />
正常上课
<else />
不知道星期几睡觉
</if>
</body>
</html>
比较标签
查看手册具体的使用方式
修改test1 方法
public function test2(){
$data=array(
'a'=>array('name'=>'tp1','version'=>5.0),
'b'=>array('name'=>'tp2','version'=>3.2),
);
$this->assign('data',$data);
$this->assign('day',2);
$this->assign('month',3);
$this->display();
}
volist标签
volist标签
name:指定需要循环的变量名称
id: 指定每次循环临时的变量名称
mod:每次在循环的过程中都会增加一个mod变量,对于该变量的值从0到设置的值轮询出现.使用mod可以实现隔行换色效果
Empty:当循环的变量为空,显示在empty中设置的内容(对于具体的内容不支持直接使用html代码)
Offset:指定偏移量(指定从具体的哪一个元素开始进行循环)
Length:指定具体的循环次数
Key:指定具体循环的下标变量名称。具体下标变量对应的值(1,2,3)
- 创建方法渲染模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
使用volist标签实现基本功能 <br>
<volist name="data" id="vo">
循环原始下标{$key}---{$vo.name} <br>
</volist>
<hr>
使用volist标签实现偏移量跟长度 <br>
<volist name="data" id="vo" offset="2" length="2">
循环原始下标{$key}---{$vo.name} <br>
</volist>
<hr>
使用volist标签实现指定循环下标 <br>
<volist name="data" id="vo" offset="2" length="2" key="keys">
循环原始下标{$key}---{$vo.name} <br>
</volist>
<hr>
使用volist标签实现指定循环mod <br>
<volist name="data" id="vo">
循环原始下标{$key}---{$mod}----{$vo.name} <br>
</volist>
</body>
</html>
public function test3(){
$data=array(
'a'=>array('name'=>'tp1','version'=>5.0),
'b'=>array('name'=>'tp2','version'=>3.2),
'c'=>array('name'=>'tp3','version'=>3.2),
'd'=>array('name'=>'tp4','version'=>3.2),
'e'=>array('name'=>'tp5','version'=>3.2),
'f'=>array('name'=>'tp6','version'=>3.2),
);
$this->assign('data',$data);
$this->display();
}