Smarty模板引擎

1.Smarty是啥
是一个使用PHP语言编写的模板引擎,实现了项目中PHP代码和HTML代码的分离。
利用MVC的思想,将逻辑和显示分离,使程序设计者可以专注于程序功能的开发,同时Smarty性能非常稳定、扩展机制很灵活。

2.实例引入

//查找数据库记录,统计条数并打印到屏幕1.0版本 index.php
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <?php
     $conn = new mysqli('localhost','root','','php');
     if($conn->connect_errno)
        die("连接失败");
    $conn->query('set names utf8');    //到此是数据库连接

    $sql = 'select * from student';
    $result = $conn->query($sql);
    $num = $result->num_rows;   //获取数据 (返回记录条数)
    ?>
    <h1><?php echo $num ;?></h1>
</body>
</html>

利用MVC思想分离页面,我们可以分为三块:
1.模型(Modle)也就是数据的来源,读取数据库
2.视图(View)前端的静态显示页面
3.控制器(Control)后台程序设计师主要的战场~ 操作数据

所以我们尽量把页面拆开来,用include或者require引入拼接成完整页面

//2.0版本 DB.php
    <?php
    $conn = new mysqli('localhost','root','','php');
     if($conn->connect_errno)
        die("连接失败");
    $conn->query('set names utf8');    //到此是数据库连接

    $sql = 'select * from student';
    $result = $conn->query($sql);

    ?>
//2.0版本 view.php
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h1><?php echo $num ;?></h1>
</body>
</html>
//2.0版本  index.php  控制器页面:)
    include ('DB.php');
    $num = $result->num_rows;   //获取数据 (返回记录条数)
    include ('view.php');  

是不是看着很爽,作为后台开发者只要include就好~~
那就太天真了:)


but
前端开发者:
我写静态页面为啥要生成PHP文件捏,
为啥还有php定界符和php代码捏,很讨厌哎

的确,这样的分离程度远远不够,那我们想想,可不可以通过字符替换的方法,解决前台页面出现动态代码的问题捏?

//3.0版本 view.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h1><{$num}></h1>
</body>
</html>
//3.0版本 change.class.php  //自定义转换字符的类文件
<?php
  class change{
     private $num;
     function assign($num,$value){
        $this->num = $value ;
     }

     public function display($tpl){        //显示视图
        $org = $tpl.".html";               //源文件名
        $obj = $tpl.".php";                //生成一个有PHP有HTML的混编文件
        $content = file_get_contents($org);   //获得文件内容
        $content = str_replace("<{\$","<?php echo \$this->",$content);    //把view文件中的<{$,替换为 <?php echo $this->  (这里的$要转意)    
        $content = str_replace("}>",";?>",$content);

        file_put_contents($obj,$content);     //把内容写进目标文件
        require $obj;                        //引入生成好的混编文件
     }
  }
?>
//3.0版本  DB.php  
//和2.0一样就好啦~~
//3.0版本  index.php  
<?php
  include ('DB.php');
  $num = $result->num_rows;   //获取数据 (返回记录条数)

  include "change.class.php" ;  //引入字符转换类文件
  $tpl = "view" ;               //前台显示页面名称
  $smt = new change() ;         //实例化
  $smt->assign("num",$num) ;    //通过assign函数传值
  $smt->display($tpl) ;         //显示页面
?>

这样成功执行后会自动生成一个view.php文件,就是我们定义的目标混编文件

但是我们看到,这个版本中除了MVC的负责页面,还多了一个字符转换的change.class.php页面,而这个页面正是Smarty帮我们设计制作好的,不需要像这样自己动手去写,只要简单配置就可以直接使用


在Smarty中,有个叫做Smarty.class.php的文件,这个功能类文件十分强大,功能就不仅仅限于我们写的字符转换这些功能

//4.0版本  config.php   //使用之前,要编写一个Smarty的配置文件
<?php
  require "../smarty-3.1.29/Smarty.class.php";  //引用smarty
  $smt = new Smarty();                          //实例化对象
  $smt->template_dir = "./view/";               //自定义存放前台视图页面位置(用单独的文件夹装,项目不会混乱)
  $smt->compile_dir = "./view_c/";              //自定义存放自动生成的编译页面位置(用单独的文件夹装,项目不会混乱)
    $smt->left_delimiter = "<{";                  //自定义左定界符
  $smt->right_delimiter = "}>";                 //自定义右定界符
  //$smt->caching = true;                         //开启缓存(还在做开发就不要开缓存啦~)
  $smt->cache_dir = "./cache/";                //配置存放缓存页面位置(生成的文件是将数据全部显示的静态页面)
?>
//4.0版本 Smarty.class.php  //smarty模板下的功能类文件,直接下载引用
//4.0版本 view.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h1><{$num}></h1>
</body>
</html>
//4.0版本  DB.php  
//和2.0一样就好啦~~
//4.0版本  index.php  
<?php
  include ('DB.php');
  $num = $result->num_rows;   //获取数据 (返回记录条数)

  include('config.php');                    //引用smarty连接、自定义配置文件
  $smt->assign("num",$num);     //给前台页面需要的变量赋值
  $smt->display("view.html");         //传入前台视图html文件名
?>

3.下载安装
(1) Smarty版本下载的官方网站
(2) 以压缩包的形式下载下来后,将其解压,可以看到包含了一个叫libs的文件夹
(3) 把libs文件夹重命名为Smarty然后放到项目中去用就可以了
(4) 可以看到这个文件夹中核心文件除了包含Smarty.class.php还有一个SmartyBC.class.php,这个文件是用来处理版本兼容问题滴


不知道酱紫有没有把Smarty给说清楚~~
这个思路是LF老师带给我的,也算是一篇总结笔记吧,这种引入式的方法很对我的胃口,写下这篇博文,以后忘了能够方便自己快速回忆=.=
这只是简单引入,真正运用在项目中,还有挺多东西要注意的

PS:手册是个很好的东西:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值