Smarty 模板引擎教程(一)—安装与配置

绝大多数人都是从同样的起点开始 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提供了很多安全特性, 可以避免服务器和应用程序数据遭到设计人员有意或无意的破坏。

smarry.jpg

二.使用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();
赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏