视图所指的就是具体在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();}



