绝大多数人都是从同样的起点开始 Web 开发生涯的。一开始只有简单的.html 文件,后来有了 gif 和 JavaScript,再后来又有了 PHP 服务器端的技术。网站开始膨胀,越来越难管理。这个时候,需要重构了。而重构的第一大问题,就是表现和逻辑相分离。这个时候, 我们就需要借助模板引擎。
一.Smarty模板引擎
什么是模板引擎
模板引擎就是为了使应用程序的业务逻辑(PHP代码)和表示逻辑(HTML代码)进行分离,从而达到程序员只关心程序的编写,而美工人员进行页面的设计的目的。
Smarty(http://smarty.php.net/)是PHP的“半官方”的模版引擎,从其主页可以看出。Smarty的作者是Andrei Zmievski和Monte Orte。它是在GNU通用公共许可下发布的,目前是最流行、功能最强大的PHP模板引擎。Smarty提供了许多强大的功能,诸如:
1.强大的表现逻辑: Smarty提供了适当的构造, 能够有条件地计算和迭代地处理数据。 虽然它本身实际上是一种语言, 但语法很简单, 设计人员可以很快地学会, 而不需要预备的编程知识。
2.模板编译:为减少开销,Smarty在默认情况下将模板转换为可比较的PHP脚本,使得后续的调用速度更快。Smarty还非常智能,在内容改变后可以重新编译。
3.缓存: Smarty还提供了缓存模板的可选特性。 缓存与编译不同的是, 支持缓存不只是能生成缓存的内容, 还能防止执行个别逻辑。 例如, 你可以指定缓存文档的生存时间,比如5分钟,在此期间可以忽略与该模板有关的数据库查询。
4.高度可配置和可扩展: Smarty的面向对象架构允许修改和扩展其默认行为。 此外,从一开始可配置性就是一个设计目标, 为用户提供了很大的灵活性, 通过内置方法和属性定制Smarty的行为。
5.安全: Smarty提供了很多安全特性, 可以避免服务器和应用程序数据遭到设计人员有意或无意的破坏。

二.使用Smarty模板
安装Smarty
安装Smarty很简单。首先去(http://www.smarty.net)下载正式版。我们这里下载了Smarty2.6.26版本作为我们使用的版本。
1.解压这个压缩包,将libs文件夹放到服务器的根目录,并且改名为smarty。
2.创建一个示例文件index.php,用来加载Smarty类库。
3.创建存储Smarty模板和配置文件的4个目录。
a) templates:放置所有网站的模板。
b) configs:放置在特定网站中使用的所有特殊的Smarty配置文件。
c) templates_c:放置Smarty编译的所有模板。
d) cache:在启用缓存特性的情况下,放置Smarty缓存的所有模板。
虽然在默认情况下,Smarty将各个目录在配置文件中已经设定好了,但还是建议用户自行修改各功能目录的名称和位置。 (不要在源代码里修改,直接通过字段重新定义覆盖即可) 。
<?php //创建一个实际路径 define('ROOT_PATH',dirname(__FILE__)); //加载smarty require ROOT_PATH.'/smarty/Smarty.class.php'; $_smarty = new Smarty(); //实例化smarty $_smarty->template_dir = ROOT_PATH.'/templates/'; //模板目录 $_smarty->compile_dir = ROOT_PATH.'/templates_c/'; //编译目录 $_smarty->cache_dir = ROOT_PATH.'/cache/'; //缓存目录 $_smarty->config_dir = ROOT_PATH.'/configs/'; //变量目录 $_smarty->caching = false; //是否开启缓 //注册变量 $_smarty->assign('title','第一个Smarty!'); //注册模板 $_smarty->display('index.tpl'); ?>
Smarty默认的花括号定界符{},很可以和CSS样式和Script脚本的花括号冲突,我们可以改变Smarty的定界符或者使用外部CSS和Script脚本。
$_smarty->left_delimiter = ‘{‘; //左定界符
$_smarty->right_delimiter = ‘}’; //右定界符
因为每次使用 smarty 都要配置一大堆目录,我们可以把配置的代码存放到
smarty.inc.php跟目录下,每个用到它的页面,直接引入即可。
以上是smarty2的定义方式,Smarty3的发布,偏向面向对象,下面提供配置类
定义 steup.php类
<?php require 'smarty/Smarty.class.php'; class Setup extends Smarty{ function __construct() { parent::__construct(); $this->setTemplateDir(dirname(__FILE__).'/templates/'); $this->setCompileDir(dirname(__FILE__).'/templates_c/'); $this->setConfigDir(dirname(__FILE__).'/configs/'); $this->setCacheDir(dirname(__FILE__).'/cache/'); $this->caching = FALSE; $this->assign('app_name', '测试'); } }
使用:
require 'setup.php'; $smarty= new Setup();
最新评论