zoukankan      html  css  js  c++  java
  • 视图

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

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

    1 <?php
    2 namespace HomeController;
    3 use ThinkController;
    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 HomeController;
     4 use ThinkController;
     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);

    则此时输出的内容为:

  • 相关阅读:
    面试只要问到分布式,必问分布式锁
    Java编程中忽略这些细节,Bug肯定找上你
    不止承上启下,带你了解工业物联网关
    论文解读二十七:文本行识别模型的再思考
    并发高?可能是编译优化引发有序性问题
    论文解读丨LayoutLM: 面向文档理解的文本与版面预训练
    SQL优化老出错,那是你没弄明白MySQL解释计划
    SQL反模式学习笔记1 开篇
    SQL Server中自定义函数:用指定的分隔符号分割字符串
    .NET软件开发与常用工具清单
  • 原文地址:https://www.cnblogs.com/jacson/p/4503670.html
Copyright © 2011-2022 走看看