ThinkPHP 学习笔记二 模版

1.模版定义

默认的模板文件定义规则是:
模板目录/模板主题/[分组名/]模块名/操作名+模板后缀
模板目录默认是项目下面的Tpl, 模板主题默认是default,模板主题功能是为了多模板切换而设计的,如果有多个模板主题的话,可以用TMPL_DEFAULT_THEME 参数设置默认的模板主题名。
在每个模板主题下面,是以项目的模块名为目录,然后是每个模块的具体操作模板文件,例如:
User模块的add操作 对应的模板文件就应该是:Tpl/default/User/add.html
模板文件的默认后缀的情况是.html,也可以通过TMPL_TEMPLATE_SUFFIX来配置成其他的。
如果项目启用了模块分组功能(假设User模块属于Home分组),那么默认对应的模板文件可能变成 :Tpl/default/Home/User/add.html

 

2. 模版赋值

 要在模板中输出变量,必须在在Action类中把变量传递给模板,视图类提供了 assign方法对模板变量赋值,无论何种变量类型都统一使用assign赋值。

$this->assign('name',$value);  

 

3.模版调用

模板变量赋值后就需要调用模板文件来输出相关的变量,模板调用通过display方法来实现。我们在操作方法的最后使用:

$this->display();

根据前面的模板定义规则,因为系统会按照默认规则自动定位模板文件,所以通常display方法无需带任何参数即可输出对应的模板。这是模板输出的最简单的用法。
一、调用当前模块的其他操作模板
格式:display('操作名')
例如,假设当前操作是User模块下面的read操作,我们需要调用User模块的edit操作模版,使用:

$this->display('edit');

不需要写模板文件的路径和后缀。

二、调用其他模块的操作模板
格式:display('分组名:模块名:操作名') 其中分组名是可选的
例如,当前是User模块,我们需要调用Member模块的read操作模版 ,使用:

$this->display('Member:read');

三、调用其他主题的操作模板
格式:display('主题名@模块名:操作名')

例如我们需要 调用Xp主题的User模块的edit操作模版,使用:

$this->display('Xp@User:edit');   

四、直接全路径输出模板
格式:display('模板文件名')
例如,我们直接输出当前的Public目录下面的menu.html模板文件,使用:
$this->display('./Public/menu.html');  

这种方式需要指定模板路径和后缀,这里的Public目录是位于当前项目入口文件位置下面。如果是其他的后缀文件,也支持直接输出

 

4.模板替换

在进行模板输出之前,系统还会对渲染的模板结果进行一些模板的特殊字符串替换操作,也就是实现了模板输出的替换和过滤。这个机制可以使得模板文件的定义更加方便,默认的替换规则有:

./ Public: 会被替换成当前项目的公共模板目录 通常是 /项目目录/Tpl/default/Public/
__ PUBLIC __:会被替换成当前网站的公共目录 通常是 /Public/
__ TMPL __: 会替换成项目的模板目录 通常是 /项目目录/Tpl/dfault/
__ ROOT __: 会替换成当前网站的地址(不含域名)
__ APP __: 会替换成当前项目的URL地址 (不含域名)
__ URL __: 会替换成当前模块的URL地址(不含域名)
__ ACTION __:会替换成当前操作的URL地址 (不含域名)
__ SELF __: 会替换成当前的页面URL

注意这些特殊的字符串是严格区别大小写的,并且这些特殊字符串的替换规则是可以更改或者增加的,我们只需要在项目配置文件中配置TMPL_PARSE_STRING就可以完成。如果有相同的数组索引,就会更改系统的默认规则

TMPL_PARSE_STRING  => array(   

      '__ PUBLIC __' => '/Common',  // 更改默认的__ PUBLIC __ 替换规则   

     '__UPLOAD__' => '/Public/Uploads/',  // 增加新的上传路径替换规则   

)

 

5. 获取内容

有些时候我们不想直接输出模板内容,而是希望对内容再进行一些处理后输出,就可以使用fetch方法来获取解析后的模板内容,在Action类里面使用:

$content = $this->fetch();

fetch的参数用法和Display方法基本一致,
8. 静态生成

ThinkPHP提供了灵活的静态文件生成功能,可以在输出模板的同时生成需要的静态文件,以供调用。
在Action中使用buildHtml方法即可创建静态文件,buildHtml方法的第一个参数就要生成的静态文件名,后面的参数和display方法一致,内部其实是调用了前面提到的fetch方法获取模板输出然后创建静态文件。用法如下:

$this->buildHtml('静态文件''静态路径','模板文件');  
静态路径如果留空的话 默认保存在HTML_PATH(默认的HTML_PATH路径位于项目目录下面的Html目录,如果没有的话手动创建)定义的路径下面,静态文件可以随意设置,也可以包括路径,如果不存在的路径系统会自动创建

9. 模板引擎

系统支持原生的PHP模板,而且本身内置了一个基于XML的高效的编译型模板引擎,无论在功能还是性能方面都优秀过Smarty。系统默认使用的模板引擎是内置模板引擎,关于这个模板引擎的标签详细使用可以参考模板指南部分。
内置的模板引擎也可以直接支持在模板文件中采用PHP原生代码和模板标签的混合使用,如果需要完全使用PHP本身作为模板引擎,可以配置:

'TMPL_ENGINE_TYPE' => 'PHP'

可以达到最佳的效率

10. 使用第三方模板引擎

系统支持模板引擎的扩展机制,并且官方提供了包括Smarty、EaseTemplate、TemplateLite和Smart在内的第三方模板引擎扩展。我们以Smarty模板引擎为例,来说明下如何使用第三方模板引擎。
首先,需要下载官方的模板引擎扩展,并放到系统目录的LibThinkUtilTemplate目录下面,然后,下载最新的Smarty模板引擎文件放到系统目录的Vendor第三方类库目录。
剩下的,我们要做的只是简单的配置下模板引擎名称即可,例如在项目配置文件里面设置:

'TMPL_ENGINE_TYPE' => 'Smarty'

区别就在于display方法直接输出模板文件渲染后的内容,而fetch方法是返回模板文件渲染后的内容。如何对返回的结果content进行处理,完全由开发人员自行决定了。这是模板替换的另外一种高级方式,比较灵活,而且不需要通过配置的方式。
注意,fetch方法仍然会执行上面的模板替换操作。

 

6.  布局模版

<!-- layout::模板文件规则::缓存时间(秒) -->
<!-- layout::Public:header::60 -->
7. 系统模板

      系统有一些内置的模板文件用于异常页面和页面Trace功能的输出,你可以定制这些模板页面,满足自己的需要。默认的系统模板主要有:

      页面Trace模板:默认位于系统目录的Tpl/PageTrace.tpl.php 是一个php文件,可更改TMPL_TRACE_FILE进行配置。

      异常模板:默认位于系统目录的Tpl/ThinkException.tpl.php,可以更改TMPL_EXCEPTION_FILE进行配置。

你用过Ease Template吗?   PHP工程中的模板应用,关于它的好处,我想无论是在实际开发阶段还是上升到设计模式的角度都已经有很多“前辈先哲”"讨论过了。就项目实施而言,在一些中型甚至大型的项目中,有效的将HTML(还有其他文本形式的表现层)和PHP代码分开,不仅在开发阶段可以提高界面设计人员和应用程序编写人员的工作效率,更会给项目的测试和维护带来巨大的便利。 什么是模板技术?   PHP模板发展自Perl的Template。剥开神秘的面纱,模板技术的核心概念简单得令人心跳:要将你的美工页面指定为模板文件,只需将页面中活动的内容部分(如数据库输出,用户交互等)定义成形式为的变量放在模板文件中相应的位置,当用户浏览时,由PHP程序文件打开该模板文件,将模板文件中定义的变量进行替换。当然,替换成对应的数据库输出或者用户交互等动态生成内容。 Ease Template 模板能够改善网站的结构,其特点有: * 可以在几秒钟改变整个站点的外观; * 可以让网站更容易实现多语言; * 抽象程序设计,没有垃圾HTML代码; * 稳定性能初期的强大甚至超越混编代码; * 提供完善的 Debug 平台; * 开发效率快地令人惊讶; * 更容易重用模版; * 开源版权保护(保证您的版权不会被侵犯)。 模板技术经过很多年的发展已经演变出各式各样的类型:phplib就效率而言在大量应用的时候效率会降低很多,但是拥有语法简单的优势;Smarty 语法强大效率很高,问题是架构庞大,语法过于复杂。如果你正在设计一个交互式网站,你一定会关注两个主要的问题:美工和程序。这也是一个网站在建设中抛开其内容之后最关键的要素。 通常有两种方式来协调美工和程序之间的关系: 1.先做好美工页面,然后由程序员直接在美工页面的HTML文件中嵌入ASP、JSP、PHP等程序代码。 2.美工和程序同时进行,但这时因为没有页面框架,程序只能先做出部分代码,双方完成后再进行一次美工页面和程序代码的嵌入合成。   在实际的网站建设过程中,由于人员、进度等环境的限制,大家通常会混合使用上面两种协调方式。然而这两种方法都有不足之处: 1. 效率不高。两者协调不好可能产生等待、重复代码调试等现象; 2. 调试不畅。由于程序代码最终需要嵌入在HTML页面中,代码的嵌入、调试、纠错都比较繁琐; 3. 维护不便。一旦美工设计需要修改,如网站改版,那么所有程序和HTML代码混合页面都需要重写。 如果你正在使用PHP程序建设网站,那么恭喜你,PHP模板技术会比较圆满地解决上述问题。 模板应用与结构,以往的开发流程如下:   流水线1:网站设计 -> 切图转为htm -> php工程师写程序 -> 程序套用htm -> 开发结束。 如果存在修改时流程如下:   流水线1:网站设计修改 -> 切图转为htm -> php工程师改程序 -> 程序套用htm -> 修改结束。 采用Ease Template之后将有一些区别性的变化,开发流程如下:   流水线1:php工程师写程序与简单模板 -> 程序测试 -> 开发结束。   流水线2:网站设计 -> 模板工程师修改(Dreamweaver) -> 开发结束。 修改流程如下:   流水线1:网站设计修改 -> 模板工程师修改(Dreamweaver) -> 修改结束。   流水线2:程序员工作被释放出来   Ease Template相对于Smarty或phplib提供更简单更高效的方法,甚至可以将数据库运用方法直接写入模板中,这样将无须复杂的数组转换操作。   目前发行的任何一套模板引擎都没有提供开源商业化版权保护。公司开发出的程序,有可能被合作方转卖或盗用。使用Ease Template便不用再为此问题担心,它提供了版权保护设置。开发方启用版权保护设置并对所有程序运行一次后将生成版权保护代码。开发方不需提供程序模板给合作方,程序仍可以独立完整运行。如果合作方需要修改原始模板将非常复杂甚至无法修改。商业版本的程序如果没有模板要修改页面对于任何人都将是非常头疼的工作,而采用Ease Template的开发者则按正常流程即可完成所有的修改工作。   Ease Template 经过多年的发展已经被很多框架所采用,其中比较有名气的当属FleaPHPThinkPHP。有些框架直接集成了Ease Template插件,用户选择Ease Template的时候无需担心兼容性以及稳定性。   当Ease Template用户觉得方法过少造成不知如何使用的时候,可以运用{run:}php方法{/run},此操作完全支持系统的所有方法以及用户自己写的方法。   看到这里也许您提出一个问题,那就是Ease Template具有这么多功能那他的速度又能达到什么程度?举个例子:对Ease Template三个引擎进行1万次循环并且载入多个模板情况下的测试结果:替换引擎0.06秒、编译引擎0.04秒、MemCache引擎0.03秒。与各种模板比较,Ease Template编译引擎的速度已经远远超越同类大部分模板,所以您无需为Ease Template的速度担心。   Ease Template 模板技术的基本概念就介绍到这里,请继续关注更加有趣的功能介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值