视图所指的就是具体在MVC中V。视图主要的作用就是与用户进行具体的数据交互(将具体的内容信息输出即可)。对于视图一般也成为模板

视图创建

视图的创建规则

  1. TP建议将具体的视图模板存储到对应的模块中的View目录中。例如目前在后台Admin模块中需要使用到的一个模板。可以将具体的视图模板存储到Application/Admin/View
  2. TP建议根据具体的控制器在视图的View目录下创建同名的目录。例如目前在后台Admin模块中有一个叫做Test控制器。将具体的视图模板存储到Application/Admin/View/Test目录中
  3. TP建议将具体的视图模板文件名称保持跟具体的方法名称一致。例如目前在后台Admin模块中有一个叫做Test控制器。在Test控制器下有一个叫做test方法,如果该方法需要使用模板。建议将的具体的模板名称取名叫test.html

    视图渲染

    视图宣染所指的其实就是将具体的视图模板进行输出显示在TP中有两个方法可以现实具体的视图的输出功能。分别为display跟fetch。对于display获取具体要输出的内容然后直接输出,fetch获取具体要输出的内容但是不会自动的输出。

    display的使用

  4. display不带任何参数

image.png
image.png
对于display方法不传递任何参数,TP会自动的定位到当前控制下的对应的同名方法的模板中。

  1. 指定当前控制器下的模板

    image.png
    创建add模板
    image.png

  2. 其他控制器下的模板

image.png
访问测试
image.png

  1. 指定其他模板

image.pngimage.png

  1. 完整模板名称

image.png
image.png

display和fetch方法的区别

Display:获取具体的模板内容并且自动的输出内容
Fetch:获取获取的模板内容但是不会自动的输出内容。
对于上述的两个方法是在使用上是一模一样。

  1. 代码:

    1. public function testF(){
    2. $this->fetch('add');
    3. }
  2. 查看具体的效果

image.png
目前没有任何的内容输出原因因为目前fecth方法没有自动的将具体的内容进行输出

  1. 修改方法

    1. public function testF(){
    2. $str =$this->fetch('add');
    3. echo $str;
    4. }

    查看效果
    image.png
    对于想要完整的使用fetch方法来实现display的操作。可以通过使用fetch 与show的方法进行配合,I先通过使用fetch方法获取具体的内容。然后在交给show方法就可以完整的使用display方法的功能

    模板替换

    为什么要使用模板替换功能

  2. 创建方法渲染模板

    1. public function add(){
    2. //display没有指定任何参数信息,宣染跟方法同名的模板文件
    3. //View/Goods/add.html
    4. $this->display();
    5. }
  3. 处理模板文件

image.png

  1. 创建css样式表文件

创建存储资源的目录文件夹
image.png
创建具体的样式表
image.png

  1. 修改模板使用样式表文件

指定样式表
image.png
效果展示:
image.png
例如后期由于某种因素需要修改资源文件的目录情况。需要将所有的模板中资源文件地址进行修改。使用此方式就会非常麻烦。可以通过使用TP的模板替换技术只需要修改一处就可以实现所有的修改。
image.png

模板替换

  1. TP内置的模板替换规则

修改add模板增加内置的模板替换规则
image.png
查看具体的模板替换
image.png

  1. 自定义模板替换

image.png
修改add模板使用自定义的模板替换标签

模板变量赋值与显示

  1. 创建方法实现赋值

    1. public function testshow(){
    2. //代表的就是具体从数据库中获取到的动态数据
    3. $msg = 'hello TP';
    4. $data =array(
    5. 'name'=>'Tp',
    6. 'version'=>3.2
    7. );
    8. //实现赋值模板的方式一,对于此方法也是使用最多的一种方法.
    9. //对于assign有两个参数,第一个对应的就是具体在模板中使用的变量名称
    10. //第二个参数指定具体要赋值给模板的数据
    11. $this->assign('msg',$msg);
    12. //实现赋值模板的方式二 对于此方式使用量比较少。
    13. //关于具体的属性名称具体在模板中使用的变量名称。
    14. //具体属性值指定具体要赋值给模板的数据
    15. $this->data=$data;
    16. $this->display();
    17. }
  2. 创建模板显示具体的数据

image.png
image.png

  1. 查看具体模板显示内容的配置参数

image.png

系统变量

系统变量就是TP 内置的一个变量。对于系统变量可以在模板中直接使用,不需要进行任何的赋值操作。对于系统变量可以输出的内容包括TP内容配置项信息,TP或者PHP内置的常量,PH超全局数据($_GET,$_POST等)。对于在模板中使用系统变量时都是“{$Think”开头

  1. 创建方法渲染视图

    1. public function testsys(){
    2. $this->display();
    3. }
  2. 创建模板显示具体的系统变量内容

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. 输出TP的配置项信息{$Think.config.DEFAULT_MODULE}<br/>
    11. 输出TP的内置常量{$Think.CONTROLLER_NAME}<br/>
    12. 输出PHP的内置常量{$Think.PHP_VERSION}<br/>
    13. 输出PHP的超全局常量{$Think.get.id}<br/>
    14. </body>
    15. </html>

    效果:
    image.png

    模板函数

    模板函数所指的就是在模板中使用某一个函数(php_内置的函数或者TP的公共函数)将具体的数据转换成为其他格式。

  3. 创建方法渲染模板

    1. public function testfunc(){
    2. $time=time();
    3. $this->assign('time',$time);
    4. $this->display();
    5. }
  4. 创建模板使用内部函数进行格式化

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. 1. 使用PHP原生代码实现转换操作:<?php echo date('Y-m-d H:i:s');?><br/>
    11. 2. 使用TP模板引擎来实现具体转换:{$time|date='Y-m-d H:i:s',###}<br/>
    12. 3. 特殊写法:{:date('Y-m-d H:i:s',$time)}<br/>
    13. 4. 使用U函数生成连接地址:{:U('index','id=4')}
    14. </body>
    15. </html>

    image.png

  5. 查看具体效果

image.png

模板运算符

例如目前有一个商品列表数据信息,在模板显示时需要显示出具体每件商品的总价格
image.png

基础的算数运算

在TP的模板中可以支持使用加、减、乘、除、取模等操作

  1. 创建方法

    1. public function jisuan(){
    2. $this->assign('a',10);
    3. $this->assign('b',2);
    4. $this->display();
    5. }
  2. 创建模板

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. a+b={$a+$b}<br/>
    11. a-b={$a-$b}<br/>
    12. a*b={$a*$b}<br/>
    13. a/b={$a/$b}<br/>
    14. </body>
    15. </html>
  3. 查看效果

image.png

数组的运算

  1. 修改计算

    1. public function jisuan(){
    2. $this->assign('a',10);
    3. $this->assign('b',2);
    4. $data=array(
    5. 'price'=>100,
    6. 'num'=>3
    7. );
    8. $this->assign('data',$data);
    9. $this->display();
    10. }
  2. 创建模板

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. a+b={$a+$b}<br/>
    11. a-b={$a-$b}<br/>
    12. a*b={$a*$b}<br/>
    13. a/b={$a/$b}<br/>
    14. 数组计算{$data['price']*$data['num']}
    15. </body>
    16. </html>

    效果:
    image.png

    内置标签

    image.png

    foreach标签

  3. 查看手册

image.png
image.png

  1. 创建方法渲染模板

    1. public function test1(){
    2. $data=array(
    3. 'a'=>array('name'=>'tp1','version'=>5.0),
    4. 'b'=>array('name'=>'tp2','version'=>3.2),
    5. );
    6. $this->assign('data',$data);
    7. $this->display();
    8. }
  2. 创建模板

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <foreach name="data" item="vo" key="k">
    11. 下标 {$k} ----name:{$vo.name}-----version:{$vo.version}<br/>
    12. </foreach>
    13. </body>
    14. </html>

    image.png

    if标签

  3. 使用的方法

image.png
说明:对于if标签指定具体的判断条件时,可以通过使用and和or来指定具体的条件的“并且”和”或者”关系。在指定具体的比较的条件时是不能直接使用=、>、<。如果需要判断就必须使用对应的英文字母
image.png

  1. 修改test1方法

    1. public function test1(){
    2. $data=array(
    3. 'a'=>array('name'=>'tp1','version'=>5.0),
    4. 'b'=>array('name'=>'tp2','version'=>3.2),
    5. );
    6. $this->assign('data',$data);
    7. $this->assign('day',2);
    8. $this->display();
    9. }
  2. 使用if标签

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. <foreach name="data" item="vo" key="k">
    11. 下标 {$k} ----name:{$vo.name}-----version:{$vo.version}<br/>
    12. </foreach>
    13. <hr>
    14. <if condition="$day eq 7">
    15. 复习代码
    16. <elseif condition ="($day gt 1) and ($day lt 6)" />
    17. 正常上课
    18. <else />
    19. 不知道星期几睡觉
    20. </if>
    21. </body>
    22. </html>

    查看效果
    image.png

    比较标签

  3. 查看手册具体的使用方式

image.png

  1. 修改test1 方法

    1. public function test2(){
    2. $data=array(
    3. 'a'=>array('name'=>'tp1','version'=>5.0),
    4. 'b'=>array('name'=>'tp2','version'=>3.2),
    5. );
    6. $this->assign('data',$data);
    7. $this->assign('day',2);
    8. $this->assign('month',3);
    9. $this->display();
    10. }

    image.png
    可以在缓存文件中查看
    image.png

    volist标签

  2. volist标签

image.png
name:指定需要循环的变量名称
id: 指定每次循环临时的变量名称
mod:每次在循环的过程中都会增加一个mod变量,对于该变量的值从0到设置的值轮询出现.使用mod可以实现隔行换色效果
Empty:当循环的变量为空,显示在empty中设置的内容(对于具体的内容不支持直接使用html代码)
Offset:指定偏移量(指定从具体的哪一个元素开始进行循环)
Length:指定具体的循环次数
Key:指定具体循环的下标变量名称。具体下标变量对应的值(1,2,3)

  1. 创建方法渲染模板
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Document</title>
    8. </head>
    9. <body>
    10. 使用volist标签实现基本功能 <br>
    11. <volist name="data" id="vo">
    12. 循环原始下标{$key}---{$vo.name} <br>
    13. </volist>
    14. <hr>
    15. 使用volist标签实现偏移量跟长度 <br>
    16. <volist name="data" id="vo" offset="2" length="2">
    17. 循环原始下标{$key}---{$vo.name} <br>
    18. </volist>
    19. <hr>
    20. 使用volist标签实现指定循环下标 <br>
    21. <volist name="data" id="vo" offset="2" length="2" key="keys">
    22. 循环原始下标{$key}---{$vo.name} <br>
    23. </volist>
    24. <hr>
    25. 使用volist标签实现指定循环mod <br>
    26. <volist name="data" id="vo">
    27. 循环原始下标{$key}---{$mod}----{$vo.name} <br>
    28. </volist>
    29. </body>
    30. </html>
    1. public function test3(){
    2. $data=array(
    3. 'a'=>array('name'=>'tp1','version'=>5.0),
    4. 'b'=>array('name'=>'tp2','version'=>3.2),
    5. 'c'=>array('name'=>'tp3','version'=>3.2),
    6. 'd'=>array('name'=>'tp4','version'=>3.2),
    7. 'e'=>array('name'=>'tp5','version'=>3.2),
    8. 'f'=>array('name'=>'tp6','version'=>3.2),
    9. );
    10. $this->assign('data',$data);
    11. $this->display();
    12. }