目录
一、模板引擎
1、什么是模板引擎
模板引擎,是指利用某种模板语言将页面制成模板,再依据业务逻辑将该模板语言翻译成业务数据,从而生成最终展示页面。其目的就是要把页面与业务数据实现彻底分离。
我们在很多地方都可以看到模板引擎的身影,比如各种CMS、论坛、代码生成器,甚至是Mootools、JQuery等JavaScript库都用到了模板引擎。
<table>
<?php
while($row = mysql_fetch_assoc($res) {
?>
<tr>
<td>产品名称</td>
<td><?php echo $row[‘goodNames’]?></td>
</tr>
<?
}
?>
<table>
公司中,是如何开发项目的?
设计组(设计效果图PS、FW)+ Web前端(HTML+CSS+JS)
程序组 (嵌入PHP)
小公司:
设计+程序(集合)
开发流程:
设计——程序——测试——上线(理论化)
设计——程序——测试——设计——程序——测试——程序——设计
如何解决以上问题:
答:通过模板引擎,把PHP逻辑代码与外观样式(HTML+CSS+JS)分离
<table>
{foreach $res $row}
<tr>
<td>产品名称</td>
<td>{$goodName}</td>
</tr>
{/foreach}
<table>
DEDECMS/ECSHOP/PHPCMS
标签手册
{$title} 文章标题
{$content} 文章内容
2、模板引擎原理
无论任何模板引擎,其实质原理都是实现对字符串的替换操作
php代码:
html代码:
效果:
3、封装一个小型的模板引擎
Template.class.php
demo01.php
demo01.html
二、Smarty模板引擎
1、什么是Smarty模板引擎
答:Smarty是通过PHP开发的模板引擎,提供了PHP逻辑代码与外观相分离的目的。
面试题:你了解与使用过那些模板引擎?
答:我了解过PHPLIB,比较擅长使用Smarty,目前正在学习Volt与Yaf
2、下载安装Smarty
1)下载地址:http://www.smarty.net/
2)下载解压如下图所示
进入libs核心文件夹
3、为什么要选择Smarty
速度 :相对于其他模板引擎而言,Smarty拥有更快的响应速度
编译型 :系统在第一次访问模板文件时,会自动将其转化为编译文件(PHP文件),当下一次请求模板文件时,如果文件没有改变,系统会自动转向到编译文件
缓存技术 :当系统访问模板文件时,如开启缓存开关,系统会自动生成缓存文件(静态页面),当下次访问系统自动转向缓存文件
原生
编译技术 < 缓存技术 < 静态化技术
插件技术 :扩展性灵活
语句自由 if/elseif/else/endif :if elseif else endif
不适合Smarty:
1)实时更新项目
2)小项目
4、使用Smarty
Smarty使用六步走
1)复制libs文件夹到项目目录中,并改名为smarty
2)创建php页面与html页面(在模板文件夹中templates)
3)在php页面中引入smarty3入口文件
4)创建smarty对象
5)通过assign方法分配变量到模板文件
6)通过display方法显示输出模板内容
示例代码:
demo01.php代码
demo01.html代码
效果:
当以上代码运行完毕后,系统会自动在项目目录生成templates_c编译目录,同时会生成编译文件,如下图所示:
模板标签会自动被Smarty替换为动态的PHP代码,当下次访问模板文件时,系统自动转向到编译文件。
为什么模板文件夹是templates/编译目录templates_c
5、编译原理
当用户的请求首先访问动态的php页面,系统自动访问smarty模板引擎,smarty引擎负责载入静态的html模板并生成编译文件(php),当用户下一次发送用户请求,系统首先校检模板文件是否改变,如改变则重新生成编译文件,否则,直接调用编译文件。
如何判断模板文件是否有改变:
在我们的window或linux操作系统,文件都有三个时间
创建时间ctime
修改时间mtime
访问时间atime
smarty模板引擎通过判断模板文件的最后修改时间来判断当前模板文件是否有改变。
6、smarty执行流程
7、smarty几个常用属性与方法
在smarty2.0中,可以使用如下方式改变模板路径
template_dir : 模板路径
complile_dir : 编译目录
config_dir : 配置目录
cache_dir : 缓存目录
在smarty2.0中,以上四个属性都是public公有属性,可以直接进行访问。
在smarty3.0后,以上四个属性都被声明为private私有属性,我们在外部就不能直接访问了。但是,我们测试发现,其一样有效:
那么是不是说我们刚才说的和实现的相违背,不是这样的,回顾php面向对象,如何去访问一个私有属性。
在smarty.class.php我们发现template_dir属性的确被声明为private,但是在外部还可以访问,为什么?
答:__set与__get魔术方法,可以实现对私有属性的访问
虽然通过以上方式可以直接在外部访问私有属性,但是不推荐大家这样使用。推荐使用3.0的设置方式:
在smarty3.0及以后版本,可以使用以下方法进行设置
setTemplateDir() :设置模板文件目录
setCompileDir() :设置模板编译目录
setConfigDir() :设置模板配置文件目录
setCacheDir() :设置缓存文件目录
示例代码:
左右分界符
默认左右分界符采用 {} 花括号,也可以通过left|right_delimiter人为更改
说明:我们知道template_c与cache文件夹,当我们没有创建时,系统会自动生成这两个,但是建议大家不要依赖其自动创建功能,最好在项目时,手工创建两个目录。
常用的方法:
assign()方法
display()方法
function assign($name,$value)方法
功能:分配变量到模板文件
参数说明:
$name:标签名称
$value:标签的值
function display($tpl)方法
功能:显示输出模板文件
参数说明:
$tpl :要显示输出的模板文件
Smarty三篇:
设计篇:主要对标签的使用,函数的使用(内建函数、自定义函数)
程序篇:主要讲解php程序实现(静态化方法)
缓存篇:主要讲解缓存技术(把大项目中缓存的应用