视图

视图是 Web 的可见内容,一般是 HTML结合 PHP 获取的数据提供给用户使用的部分,属于 MVC 中的 V。

 

一. 模版定义
模版在使用之前需要一定的设置,才能方便开发者使用。每个模块的模版文件是独立的,
为了对模版文件更加有效的管理,ThinkPHP 对模版文件机型目录划分,默认的模版文件定
义规则是:
  视图目录/[模版主题/]控制器名/操作名+模版后缀
  第一步:在 User 控制器模块执行一条语句: (即在 Home/controller/UserController.class.php 中插入)

1 <?php
2 namespace Home\Controller;
3 use Think\Controller;
4 
5 class UserController extends Controller {
6         public function index() {
7             $this->display();
8         }
9 }

 

什么都没有定义的情况下,会自动报错,错误信息提示如下:

1 模板不存在:./WeiBo/Home/View/User/index.html

也就是这时,显示的是 ./WeiBo/Home/View/User/index.html 中的代码

通过这个错误提示,我们只要在 View 目录下创建 User 目录,并在 User 目录下创建
index.html 文件,这时模版渲染模版输出成功。

 

默认情况下视图目录是 View,如果你想改变成别的目录名可以设置:(在 WeiBo/Common/Conf/config.php 中插入)

1 //修改模版的视图目录
2 'DEFAULT_V_LAYER' =>'Template',

也就是以后会在 ./WeiBo/Home/Template/User/index.html 中显示内容

 

默认情况下的模版文件后缀是.html,如果你想改变成别的后缀可以设置:

1 //修改模版中的文件的后缀
2 'TMPL_TEMPLATE_SUFFIX'=>'.tpl',

 

如果感觉每一个模块,都要创建相应的目录太过于麻烦,可以设置:

1 //用下划线代替目录层次
2 'TMPL_FILE_DEPR'=>'_',      //User_index.tpl

以后访问的则是: ./WeiBo/Home/View/User_index.html 了。

 

如果不想将模版存在在当前 Weibo 目录下,而设置在外部:

1 //设置外部的模版目录
2 'VIEW_PATH'=>'./Public/',

这时的Public是与weibo目录同级的

 

如果一个系统要考虑多套界面皮肤的话,要考虑到默认皮肤以及可选皮肤:

1 //设置默认主题目录
2 'DEFAULT_THEME'=>'default',

以后访问的默认主目录是  WeiBo/View/default  下的内容,也就是说,View下可建立多个不同名字的目录,

 

如果要更改的话,可在 Home/controller/UserController.class.php 中写入:

此时已在 WeiBo/View/ 下建立Blue的目录

1 class UserController extends Controller {
2         public function index() {
3             $this->theme('blue')->display();
4         }
5 }

 

二.赋值和渲染

如果要在模版中输出变量,必须在控制器中把变量传递给模版。ThinkPHP 提供了
assign 方法对模版变量赋值,无论何种变量类型都统一使用 assign 赋值。

在 Home/controller/UserController.class.php 中插入以下代码:

 1 <?php
 2 
 3 namespace Home\Controller;
 4 use Think\Controller;
 5 
 6 class UserController extends Controller {
 7         public function index() {
 8             $this->assign('user','蜡笔小新');
 9             $this->display();
10         }
11 }

因为这个模版是User,所以默认的则是在 View/User/index.html 显示内容,所以在 View/User/index.html 中代码为:

<html>
<head>
</head>

<body>
传过来的名字是{$user}
</body>
</html>

在浏览器中显示的是:

PS:这个方法必须在 display()方法之前使用,保存变量正确传递。

渲染模版输出使用的是 display 方法,有三个可选参数:
display([模版文件][,字符编码][,输出类型]);

如果不传递任何参数,它会按照默认的目录定位模版的位置:
当前模块/默认视图目录/当前控制器/当前操作.html

 

1 //修改默认模版
2 $this->display('add');

则这时调用的文件是: ./Weibo/Home/View/User/add.html  

 

1 //修改默认模版,目录加模版
2 $this->display('Bbb/add');

这时调用的文件是: ./Weibo/Home/View/Bbb/add.html 

记得给Bbb/add加上单引号。

 

//修改默认模版,模块加目录加模版
$this->display('Admin@Bbb/add');

这时调用的文件是 ./WeiBo/Admin/View/Bbb/add.html 

需要注意的是:Admin和Home是同级的, $this->display('Admin@Bbb/add'); 里没有View,但是在Admin这个文件夹下,必须要建立View文件夹。Admin和Bbb/add.html中间是@符号。

 

1 //修改默认模版,主题加目录加模版
2 $this->theme('blue')->display('Bbb/add');

调用的文件是: ./WeiBo/Home/View/blue/Bbb/add.html 

 

1 //修改默认模版,自定义模版
2 $this->display('./Template/Public/add.html');

这时调用的文件是: ./ Template/Public/add.html  Template文件与WeiBo文件同级,

需要注意的是,这时是不需要View文件夹的。

 

1 /修改默认模版,指定编码和文件类型,一般不用填写,默认即可
2 $this->display('add', 'utf-8', 'text/xml');

 

三. 模版地址

ThinkPHP 封装了一个 T 函数,专门用于生成模版文件。格式如下:
T([资源://][模块@][主题/][控制器/]操作,[视图分层]);

1 //输出当前模版地址
2 echo T();

这时输出的为: ./WeiBo/Home/View/User/index.html 

 

当然可以结合上面讲的所有定义方法来自定义模版:

 echo T('Public/add') 显示的路径为: ./WeiBo/Home/View/Public/add.html 

 echo T('Admin@index'); 显示的路径为: ./WeiBo/Admin/View/User/index.html 

 echo T('Admin@Public/add', 'Template'); 显示的路径为: ./WeiBo/Admin/Template/Public/add.html 

 

也可以这样:

1 //直接使用T函数输出
2 $this->display(T());

 

四.获取内容

如果需要获取模版的内容,可以使用 fetch()方法,这个方法的使用和 display()方法一致。

1 //获取模版里的内容
2 $content = $this->fetch();
3 var_dump($content);

这时在 WeiBo/Home/View/User/index.html 中的代码为:

1 <html>
2 <head>
3 </head>
4 
5 <body>
6 这里是WeiBo/Home/View/User/index.html
7 </body>
8 </html>

在浏览器中调用 UserController.class.php 后,显示为: string(87) " 这里是Home/View/User/index.html "  

再在 Home/controller/UserController.class.php 中加入一行:

1 //通过内容再渲染输出
2 $this->show($content);

则此时输出的内容为:

 

posted @ 2015-05-14 16:28  todaytoday  阅读(187)  评论(0编辑  收藏  举报