PHP模板引擎之Smarty简介

##Smarty模板引擎技术

  • 什么是模板引擎?
  • 什么是Smarty模板引擎?
  • 为何选择Smarty模板引擎?
  • 如何使用Smarty模板引擎?

模板引擎概述

1、什么是模板引擎

模板引擎,是指利用某种模板语言将页面制成模板,再依据业务逻辑将该模板语言翻译成业务数据,从而生成最终展示页面。其目的就是要把页面(HTML)与业务数据(PHP)实现彻底分离。(模板引擎可以将我们php项目的前端和后端的开发分离)。

业界主流的开源cms中对模板引擎的使用是很广泛的,如业界知名cms:dedecms,discuz,phpcms,echop等。

2、感受模板引擎

通过在html中使用标签的方式,就可以达到不用修改php 代码情况下,完成制作一个网站。

那么?这样的原理是怎么样的?

3、模板引擎核心原理

所有的模板引擎底层实现都是基于这个原理实现,不管他有多强大多复杂,最基本的核心实现思路都是一致的。

4、封装模板引擎

为什么要封装?为了实现代码的重用,以更优雅的方式组织代码。

Smarty模板引擎

1、什么是Smarty模板引擎

Smarty是一个基于PHP开发的PHP模板引·擎。它提供了逻辑与外在内容的分离。(实现了php项目的前端和后台开发的分离)

一个叫名字叫做Smarty,且使用php编写的模板引擎。

2、如何获取Smarty模板引擎

Smarty官网: http://www.smarty.net/

3、lib目录详解
Plugings    拓展插件目录

Sysplugins    Smarty系统插件目录

AutoLoader.php    自动载入类

Debug.tpl    Smarty提示信息模板

Smarty.class.php    Smarty3.0入口文件(兼容2.0)

SmartyBC.class.php    Smarty2.0入口文件

4、为什么要选择Smarty模板引擎

从技术背景角度来说:Smarty是由php官方开发团队开发和维护。

速度        相对于其他模板引擎,Smarty模板引擎的执行效率更高。
编译型        第一次访问项目,Smarty模板引擎会生成一个编译文件,第二次访问时会判断项目的模板文件是否被修改,如果没有修改,就执行编译文件。
缓存技术    当项目的缓存文件在生命周期内,那么Smarty在执行的时候会直接执行缓存文件
插件技术:当Smarty内部功能不够使用的时候,允许开发者自定义拓展插件
语句自由 if/elseif/else/endif:标签语法很简单。

编译速度 < 缓存速度 < 静态化

什么情况下使用Smarty模板引擎?那么什么情况下使用Smarty引擎不好?

在数据不常更新修改,非实时更新的项目可以使用Smarty模板引擎:管理系统,内容管理系统等
在数据实时更新的项目中使用不好:金融类型项目,数据时时更新类项目。

5、部署Smarty四步走
  • 第一步:复制lib目录至虚拟主机目录

  • 第二步:修改lib文件夹名为Smarty

  • 第三步:创建templates文件夹

  • 第四步:创建templates_c文件夹

6、使用Smarty模板引擎七步走
  • 第一步:在虚拟主机目录下创建一个index.php文件

  • 第二步:在index.php文件中引入

  • 第三步:Smarty类并实例化

  • 第四步:在templates文件中创建一个index.html文件

  • 第五步:在index.php文件中使用assign方法配置变量

  • 第六步:在index.php文件夹中使用display方法加载模板

  • 第七步:在index.html模板文件中编写Smarty标签

7、Smarty模板引擎的执行原理

我们访问了index.php,通过在index.php文件中分配的变量,在html中显示出来。

那么这中间发生了什么?

  • 当第一次访问index.php的时候,Smarty模板引擎会自动在templates_c文件夹中创建一个display()方法所指定的模板的缓存文件。
  • 当第二次访问index.php的时候,会判断display()方法指定的模板文件是否被修改,如果被修改了,则重新生成这个模板文件的编译文件,如果没有被修改则直接执行这个编译文件

Smarty中常用的属性与方法

常用属性

<?php
include "Smarty/Smarty.class.php";
//实例化SMarty类
$Smarty = new Smarty();
$name = '我是小明';
$PHP = 'PHP是世界上最好的语言';
//修改左定界符
$Smarty->left_delimiter = '<{';
//修改右定界符
$Smarty->right_delimiter = '}>';
//修改模板文件路径
$Smarty->template_dir = './view';
//修改的编译路径
$Smarty->compile_dir ='./compile';
$Smarty->assign('name',$name);
$Smarty->assign('PHP',$PHP);
$Smarty->display('demo.php');

相关属性

思考:为什么我们要设置templates和templates_c两个文件夹

答:这些目录都是由Smarty中的下面几个属性决定的。



template_dir 模板文件目录
complile_dir 编译文件目录
config_di r 配置文件目录
cache_dir 缓存文件目录



示例代码:

<?php
include "Smarty/Smarty.class.php";
//实例化SMarty类
$Smarty = new Smarty();
$name = '我是小明';
$PHP = 'PHP是世界上最好的语言';
//修改左定界符
$Smarty->left_delimiter = '<{';
//修改右定界符
$Smarty->right_delimiter = '}>';
//修改模板文件路径
$Smarty->template_dir = './view';
//修改的编译路径
$Smarty->compile_dir ='./compile';
$Smarty->assign('name',$name);
$Smarty->assign('PHP',$PHP);
$Smarty->display('demo.php');


在Smarty3.0中,这四个属性都是private私有的,那么为什么可以在类外部修改私有属性?

在PHP中有魔术方法__set

3、相关方法

因为Smarty3.0是为了兼容Smarty2.0版本,允许通过属性的方式来设置相关属性。

但是为了迎合Smarty3.0开发规范,我们一般通过使用相关方法对相关属性的设置。。

setTemplateDir()        设置模板文件目录
setCompileDir()        设置编译文件目录
setConfigDir()            设置配置文件目录
setCacheDir()            配置缓存文件目录

示例代码:

<?php
include "Smarty/Smarty.class.php";
//实例化SMarty类
$Smarty = new Smarty();
$name = '我是小明';
$PHP = 'PHP是世界上最好的语言';
//修改左定界符
$Smarty->left_delimiter = '<{';
//修改右定界符
$Smarty->right_delimiter = '}>';
//修改模板的路径
$Smarty->setTemplateDir('./tmp');
//修改编译文件的路径
$Smarty->setCompileDir('./c');
$Smarty->assign('name',$name);
$Smarty->assign('PHP',$PHP);
$Smarty->display('index.tpl');
4、Smarty中常用的两个方法
Assign(`模板变量名称`,`值`)

Display(`模板名称`)

5、注意事项

一般在使用Smarty做项目的时候,如果templates_c文件不存在,那么会自动创建,但是在linux环境中因为文件权限的问题,。

Display方法指定的模板文件,不一定是.html 结尾的,使用任何文本文件都可以。

坚持原创技术分享,您的支持将鼓励我继续创作!