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:手册是个很好的东西:)