《Php笔记3.3》ThinkPHP视图——基本结构,视图变量赋值,视图渲染
视图作为 MVC 中的 V,是应用展示数据的窗口,直接关系到与用户的交互,良好的数据展示可以极大地提升用户体验。
ThinkPHP 视图(一):基本结构
本课时讲解 ThinkPHP 视图的基本结构和如何通过配置参数来自定义视图结构。
新建Views模块,/index.php:
define('BIND_MODULE', 'Views');
渲染视图:Application/Views/Controller/IndexController.class.php
<?php namespace Views\Controller; use Think\Controller; class IndexController extends Controller { public function index(){ $this->display(); //渲染视图 } }
此时,访问Views模块的首页,视图文件位置是:
./Application/Views/View/Index/index.html
自定义视图结构:
通过在Views/config.php中配置以下几个配置项,就可以定义出我们想要的视图结构

'DEFAULT_V_LAYER' => 'Template', //视图目录 'TMPL_TEMPLATE_SUFFIX' => '.htm', //模板文件后缀 'TMPL_FILE_DEPR' => '_' //连接符 'VIEW_PATH' => './Theme/Views' //自定义模块视图文件目录
ThinkPHP 视图(二):视图变量赋值和渲染
本课时讲解通过 ThinkPHP 控制器给视图变量赋值和渲染模板。

display渲染并输出,fetch渲染返回渲染内容但不输出;通常,我们用fetch渲染内容,经过处理后再用show输出。
变量赋值,视图渲染:Views/Controller.class.php
1 <?php 2 namespace Views\Controller; 3 use Think\Controller; 4 class IndexController extends Controller { 5 public function index(){ 6 $username = '科比'; 7 $email = 'kobe@qq.com'; 8 $age = 37; 9 10 $people = array( 11 'user'=>$username, 12 'mail'=>$email, 13 'age'=>$age 14 ); 15 $this->assign('people', $people); 16 17 $this->assign('user', $username); 18 $this->assign('mail', $email); 19 $this->assign('age', $age); 20 21 // $this->display(); //渲染视图 22 23 $fetchContent = $this->fetch(); 24 $fetchContent = str_replace('qq', '163', $fetchContent); 25 26 $this->show($fetchContent); 27 } 28 }
assign可以是变量也可以是变量数组;
用fetch渲染后,可以将渲染内容进行处理后再show输出。
模板文件输出变量:Views/View/Index/index.html (这里我们用bootstrap的页面来展示)
1 <!DOCTYPE html> 2 <html lang="zh-CN"> 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"> 7 <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! --> 8 <meta name="description" content=""> 9 <meta name="author" content=""> 10 <link rel="icon" href="http://v3.bootcss.com/favicon.ico"> 11 12 <title>Starter Template for Bootstrap</title> 13 14 <!-- Bootstrap core CSS --> 15 <link href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet"> 16 17 <!-- Custom styles for this template --> 18 <link href="http://v3.bootcss.com/examples/starter-template/starter-template.css" rel="stylesheet"> 19 20 <!-- Just for debugging purposes. Don't actually copy these 2 lines! --> 21 <!--[if lt IE 9]><script src="http://v3.bootcss.com/assets/js/ie8-responsive-file-warning.js"></script><![endif]--> 22 <script src="http://v3.bootcss.com/assets/js/ie-emulation-modes-warning.js"></script> 23 24 <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> 25 <!--[if lt IE 9]> 26 <script src="//cdn.bootcss.com/html5shiv/3.7.2/html5shiv.min.js"></script> 27 <script src="//cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script> 28 <![endif]--> 29 </head> 30 31 <body> 32 33 <nav class="navbar navbar-inverse navbar-fixed-top"> 34 <div class="container"> 35 <div class="navbar-header"> 36 <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> 37 <span class="sr-only">Toggle navigation</span> 38 <span class="icon-bar"></span> 39 <span class="icon-bar"></span> 40 <span class="icon-bar"></span> 41 </button> 42 <a class="navbar-brand" href="#">Project name</a> 43 </div> 44 <div id="navbar" class="collapse navbar-collapse"> 45 <ul class="nav navbar-nav"> 46 <li class="active"><a href="#">Home</a></li> 47 <li><a href="#about">About</a></li> 48 <li><a href="#contact">Contact</a></li> 49 </ul> 50 </div><!--/.nav-collapse --> 51 </div> 52 </nav> 53 54 <div class="container"> 55 56 <table class="table table-hover"> 57 <caption>用户信息表</caption> 58 <thead> 59 <tr> 60 <th>#</th> 61 <th>用户名</th> 62 <th>电子邮件</th> 63 <th>年龄</th> 64 </tr> 65 </thead> 66 <tbody> 67 <tr> 68 <th scope="row">1</th> 69 <td>{$user}</td> 70 <td>{$mail}</td> 71 <td>{$age}</td> 72 </tr> 73 <tr> 74 <th scope="row">2</th> 75 <td>{$people.user}</td> 76 <td>{$people.mail}</td> 77 <td>{$people.age}</td> 78 </tr> 79 </tbody> 80 </table> 81 82 </div><!-- /.container --> 83 84 85 <!-- Bootstrap core JavaScript 86 ================================================== --> 87 <!-- Placed at the end of the document so the pages load faster --> 88 <script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> 89 <script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> 90 <!-- IE10 viewport hack for Surface/desktop Windows 8 bug --> 91 <script src="http://v3.bootcss.com/assets/js/ie10-viewport-bug-workaround.js"></script> 92 </body> 93 </html>
ThinkPHP输出变量的方法:{$变量名}
ThinkPHP 视图(三):主题
本课时讲解 ThinkPHP 视图的主题功能。

Views/config设置配置项:
// 'DEFAULT_V_LAYER' => 'Template', //视图目录 // 'TMPL_TEMPLATE_SUFFIX' => '.htm', //模板文件后缀 // 'TMPL_FILE_DEPR' => '_' //连接符 // 'VIEW_PATH' => './Theme/Views' //自定义模块视图文件目录 'DEFAULT_THEME' => 'default', // 默认主题 'TMPL_DETECT_THEME' => 'true', // 自动侦测模板主题 'THEME_LIST' => 'default,jike' // 主题列表
Views/View目录下新增default目录,jike目录,作为两个主题的目录
Views/View/default.html:
<li><a href="{:U('index',array('t'=>'default'))}">默认主题</a></li> <li><a href="{:U('index',array('t'=>'jike'))}">极客主题</a></li> <div class="alert alert-warning"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button> <strong>default</strong> 默认主题! </div>
ThinkPHP模板中读取变量用 {$变量名}
ThinkPHP模板中使用URL动态函数 {:U('位置','参数')} 上面代码中的array('t'=>'jike')是默认模板切换变量GET传递,相当于 路径?t=default
Views/View/jike.html:
<li><a href="{:U('index',array('t'=>'default'))}">默认主题</a></li> <li><a href="{:U('index',array('t'=>'jike'))}">极客主题</a></li> <div class="alert alert-info"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button> <strong>jike</strong> 极客主题! </div>
页面结果:




浙公网安备 33010602011771号