### 视图模板 [TOC=4,6] #### 模板设计 在项目的application\index\view(存放视图的目录)下新建文件userlayout.html,该文件作为学生模块的模板。 >[info] 在控制器中可以使用$this->view->engine->layout('userlayout');来使用该模板。当然,您也可以在配置文件或视图文件中配置模板,具体参见ThinkPHP5官方教程,此处不再赘述。 然后将界面视图的公共部分(除右侧内容区域以外的所有区域)放置到该模板页面中。模板主要代码如下: ~~~ <!--引入依赖的CSS文件--> …… <link href="__PUBLIC__/static/vendor/matrix-admin/css/font-awesome.css" rel="stylesheet" /> …… <!--头部固定导航条--> <div class="navbar navbar-fixed-top"> <div class="navbar-inner"> <div class="container"> <a class="brand" href="./">DC 学生作业管理系统</a> <div class="nav-collapse"> <ul class="nav pull-right"> <li> <a href="#"><span class="badge badge-warning">7</span></a> </li> <li class="divider-vertical"></li> <li class="dropdown"> <a data-toggle="dropdown" class="dropdown-toggle " href="#"> {$stuname} <b class="caret"></b> </a> <ul class="dropdown-menu"> <li> <a href="./account.html"><i class="icon-user"></i> 账户设置 </a> </li> <li> <a href="./account.html"><i class="icon-lock"></i> 修改密码</a> </li> <li class="divider"></li> <li> <a href="./logout"><i class="icon-off"></i>退出</a> </li> </ul> </li> </ul> </div> <!-- /nav-collapse --> </div> <!-- /container --> </div> <!-- /navbar-inner --> </div> <!-- /navbar --> <!--主体部分--> <div id="content"> <div class="container"> <div class="row"> <!--左侧导航区--> <div class="span3"> <div class="account-container"> <div class="account-avatar"> <img src="__PUBLIC__/static/vendor/matrix-admin/img/headshot.png" alt="" class="thumbnail" /> </div> <!-- /account-avatar --> <div class="account-details"> <span class="account-name">{$stuname}</span> <span class="account-role">学生</span> <span class="account-actions"> <a href="javascript:;">个人信息</a> | <a href="javascript:;">设置</a> </span> </div> <!-- /account-details --> </div> <!-- /account-container --> <hr /> <ul id="main-nav" class="nav nav-tabs nav-stacked"> <li class="{$index}"> <a href="./{$Request.session.stuno}.html"> <i class="icon-home"></i> 已完成作业 </a> </li> <li class="{$newtasks}"> <a href="./newtasks.html"> <i class="icon-pushpin"></i> 未完成作业 <span class="label label-warning pull-right">{$num}</span> </a> </li> <li class="{$account}"> <a href="./account.html"> <i class="icon-user"></i> 账户设置 </a> </li> </ul> <hr /> <div class="sidebar-extra"> <p> 您可以使用本系统查看老师布置的作业,完成它们并提交到数据库中,并实时的查看老师给你的评分。 </p> </div> <!-- .sidebar-extra --> <br /> </div> <!-- /span3 --> <!--右侧内容区--> <div class="span9"> {__CONTENT__} </div> </div> <!-- /row --> </div> <!-- /container --> </div> <!-- /content --> <!--尾部版权声明区--> <div id="footer"> <div class="container"> <hr /> <p>&copy; all rights reserved.</p> </div> <!-- /container --> </div> <!-- /footer --> </body> </html> ~~~ #### 代码解析 1、引入CSS 首先需要引入视图模板所依赖的CSS文件,如引入字体样式font-awesome.css,对应的代码为: ~~~ <link href="__PUBLIC__/static/vendor/matrix-admin/css/font-awesome.css" rel="stylesheet" /> ~~~ 2、固定在头部的导航条——`<div class="navbar navbar-fixed-top">` 头部的导航条包括系统的名称、快捷用户操作的下拉菜单。 3、左侧导航区——`<div class="span3">` 其中包括,用户信息(头像、姓名、快捷设置菜单等)、导航菜单(已完成作业、未完成作业、账户设置) 4、右侧主体内容区——`<div class="span9">` 根据用户点击不同的菜单加载不同的内容。 #### 变量解析 代码中有很多ThinkPHP视图变量,这些需要在控制器中给其赋值,视图变量包括: 1、$stuname——学生姓名 2、$Request.session.stuno——保存在Session中的学生学号(参考官方教程中Session的用法) 3、$index、$newtask、$account 这些变量主要是配合前端的导航菜单,当用户访问哪个控制器,就在哪个控制器中将相应的变量赋值为"active",这样,该菜单项就变成黑色,以标识当前正在访问的就是该菜单项。 >[info] 如当用户访问 http://localhost/dc/student/index 的时候,在student模块的index控制器中使用代码**$this->assign('index','active');**将视图中的**$index**变量设置为**active**,那么其前端代码`<li class="{$index}">`会被服务器转换成`<li class="active">`,从而可以标识当前菜单为活动菜单。这也是在项目开发中的一个**常用技巧**。 4、`{__$CONTENT__}`——ThinkPHP模板内置占位变量,用于标识变化的部分。可在配置文件中修改。 所有变化的部分(主体部分)都用来替换该变量。这也是模板技术的核心。 这里只介绍视图概况和模板,其他主体部分视图将结合主体模块控制器进行对应讲解。