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

 

 
 
 
 
 
 
 
 

 
 
                         
                                

