View应用

    DoitPHP支持PHP和HML两种文件格式的视图文件,当视图文件为PHP时,直接由Controller基类(Controller Class)所提供的视图处理类方法直接搞定,无需调用视图基类(View Class)的文件,更无需实例化视图基类。因此PHP的视图文件运行效率要高于HTML的视图文件。在我们大量的测试中,实现同样功能的页面,用PHP视图文件运行效率要比HTML的视图文件时高出9%。不过用HTML视图文件也有它的优势,就是便于团队协作。在一个大型的web开发团队里,网站前台设计人员并不是都懂PHP代码。

    在介绍DoitPHP视图应用之前,先明确几个概念:

    布局视图(layout):如上面所示,白色框架中的即是layout。布局就是整个页面的版面设计。通常大部分网站页面的版面设计都遵寻一个统一的布局。所以使用布局视图文件,可以实现视图文件代码的“重复利用”,从而提高程序开发效率。

    控制器视图(content):即当前Action视图内容(如上图content的部分),这部分页面内容通常都是变化的。

    挂件视图(widget):挂件(小部件)就是用于边栏中各种小模块,通常包括主菜单、搜索表单、登陆表单、热门文章列表、日历显示、广告区块、及菜单导航条。开发同一个挂件,可以被多个所需要的视图共用,所以DoitPHP的挂件也是为了实现代码共用,提高程序开发效率而设计的。

    1、当视图为PHP文件时:如下图所示:首先由controller基类中的方法:assign()把页面内容的变量赋值到视图类方法的作用域中,便于加载视图文件时对变量内容的调用。其次分析出当前页面所要调用的视图文件(控制器视图)的路径。再次由display()加载和显示视图文件内容。其中display()的执行过程为:首先加载视图文件,依据assign()所赋值的变量值,获取视图文化的内容。其次分析布局视图文件。当布局文件存在时则获取其页面内容,接下来将控制器视图的内容赋值到布局视图$viewContent变量中。最后显示页面内容。如果布局视图文件不存在,则直接显示控制器视图页面内容。

    View应用 - 图2

    2、当视图文件为HTML时:首先使用assign()对视图变量完成赋值,然后由display()完成视图文件的加载,编译和显示。当display()运行时,首先分析视图文件的编译文件,当编译文件需要重新生成时则加载视图文件,将视图文件中的“模板标签”转换为PHP代码。将处理后的内容写入编译文件。如编译文件无需重新生成时,则直接加载编译文件并显示其内容。 注:虽然视图文件是HTML的,依然支持布局视图和挂件视图。

    二、视图基类的模板标签说明

    DoitPHP的视图标签和discuz模板的标签类似,操作非常简单。注:这些视图标签只有当视图文件为HTML时才有“用武之地”。如果视图文件是PHP的,直接用PHP代码就OK了,以下模板标签不适用。下面将模板标签的详细使用方法介绍一下:

    <!— {模板标签内容} —>

    为了照顾不同软件在HTML注释代码<!— —>的操作支持不同。<!— —>与{}之间有无空隔(仅只是一个空格),模板都支持。如:<!—{$doitphp}—>和<!— {$doitphp} —>都是“合法”的。

    2、模板变量。

    <!— {$模板变量} —>

    <!— {$模板变量['索引']} —>或<!— {$模板变量.索引} —>

    <!— {if $模板变量1 运算符 $模板变量}—>

    1. 模板内容1
    2. <!-- {else}-->
    3. 模板内容2

    1. <!-- {if $模板变量1 运算符 $模板变量2}-->
    2. 模板内容1
    3. <!-- {else if $模板变量1 运算符 $模板变量3}-->
    4. 模板内容2
    5. <!-- {else}-->
    6. 模板内容3
    7. <!-- {/if}-->

    4、循环语句的模板标签。

    1. <!-- {loop 模板数组 $索引变量=>$值变量} -->
    2. 执行语句
    3. <!-- {/loop} -->
    4. <!-- {loop 模板数组 $值变量} -->
    5. <!-- {/loop} -->
    1. 例一、
    2. <!-- {loop $data $key=>$value} -->
    3. <!-- {$key} -->:<!-- {$value} -->
    4. <!-- {/loop} -->
    5.  
    6. 例二、
    7. <!-- {loop $data $value} -->
    8. n+1
    9. <!-- {/loop} -->

    <!— {include 模板文件} —>

    注:此模板文件一般为共享性模板文件。如:每个页面的版信息。如果将版权信息这部分单独自作一个独立模板,让每个页面通过include的方式进行共享。

    注:common为系统目录views中的子目录,copyright为文件名。模板文件这里省略了.html的后缀名。

    1. 例二、
    2. <!-- {include copyright } -->

    注:这里的模板名称只有copyright,没有上面例一中的common目录。当模板文件名不含模板所在的目录时,系统默认为这个页面(就是调用include的模板所在的页面)的controller所对应的模板存放目录。如:当前cotroller为demo。就是视图目录中子目录demo的目录。

    6、widget模板标签。

    <!— {widget 参数} —>

    DoitPHP 视图还支持一个比inclue还要高级的模板共享功能,即挂件(widget)功能。(关于具体的widget,以后还会详细说明)。这里的参数为widget名。

    1. <!-- {widget login} -->

    <!— {php PHP语句} —>

    eval的功能为在模板中执行PHP语句。

    原文: http://www.doitphp.com/index/documentation/?articleid=22