PHP之路 WEB【第三篇】smarty模板引擎剖析

模板引擎的工作原理

如何实现HTML代码和PHP代码分离

实现HTML代码和PHP代码分离的目的是:实现前端设计人员和PHP程序员的分离。
多数Web开发人员要么是精通网页设计,能够设计出漂亮的网页外观,但是编写的PHP代码很糟糕;要么仅熟悉PHP编程,能够写出健壮的PHP代码,但是设计的网页外观很难看。具备两种才能的开发人员很少见。
将PHP和HTML混合页面,分成两个独立的页面:
一个是HTML静态页面(视图文件、模板文件),扩展名是.html,包含HTML、CSS、JS
一个是纯PHP程序页面(控制器文件),扩展名是.php,主要PHP代码。
运行时,将HTML文件代码,包含到PHP文件中。

HTML和PHP分离

HTML和PHP简单分离

<?php
//(1)数据库配置信息
$db_host = "localhost";    //主机名  localhost:3306
$db_port = "3306";        //端口号
$db_user = "root";        //用户名
$db_pass = "root";        //密码
$db_name = "mingren";    //数据库名
$charset = "utf8";        //字符集

//(2)PHP连接MySQL服务器
if(!$link = @mysqli_connect($db_host.":".$db_port,$db_user,$db_pass))
{
    echo "<h2>PHP连接MySQL服务器失败!</h2>";
    echo "系统错误信息:".mysqli_connect_error();
    die(); //中止程序向下运行
}

//(3)选择当前数据库
if(!mysqli_select_db($link,$db_name))
{
    echo "<h2>选择数据库{$db_name}失败!</h2>";
    die();
}

//(4)设置数据库返回数据字符集
mysqli_set_charset($link,$charset);
conn.php
<?php
//包含连接数据库的公共文件
require_once("./conn.php");
//执行查询的SQL语句
$sql = "SELECT * FROM student ORDER BY id DESC";
$result = mysqli_query($link,$sql);
//获取所有行数据
$arrs = mysqli_fetch_all($result,MYSQLI_ASSOC);
//获取学生人数
$records = mysqli_num_rows($result);

//包含视图文件
include "./view.html";
controller
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>学生信息管理中心</title>
<script type="text/javascript">
//定义一个JS的提示函数
function confirmDel(id)
{
    //询问是否要删除?
    if(window.confirm("你真的要删除吗?"))
    {
        //如果单击"确定"按钮,跳转到delete.php页面
        location.href = "./delete.php?id="+id;
    }
}
</script>
</head>
<body>
<div style="text-align:center;padding-bottom: 10px;">
    <h2>学生信息管理中心</h2>
    <a href="./add.php">添加学生</a>
    共有<font color=red><?php echo $records?></font>个学生信息
</div>
<table width="600" border="1" align="center" rules="all" cellpadding="5">
    <tr bgcolor='#ccc'>
        <th>编号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>年龄</th>
        <th>学历</th>
        <th>工资</th>
        <th>奖金</th>
        <th>籍贯</th>
        <th>操作选项</th>
    </tr>
    <?php
    //循环二维数组
    foreach($arrs as $arr){
    ?>
    <tr align="center">
        <td><?php echo $arr['id']?></td>
        <td><?php echo $arr['name']?></td>
        <td><?php echo $arr['sex']?></td>
        <td><?php echo $arr['age']?></td>
        <td><?php echo $arr['edu']?></td>
        <td><?php echo $arr['salary']?></td>
        <td><?php echo $arr['bonus']?></td>
        <td><?php echo $arr['city']?></td>
        <td>
            <a href="">修改</a> | 
            <a href="#" onClick="confirmDel(<?php echo $arr['id']?>)">删除</a>
        </td>
    </tr>
    <?php }?>
</table>
</body>
</html>
view.html

HTML和PHP完全分离

方法:完全去除视图文件中的PHP标记

<?php
//定义两个变量
$name = "张三丰";
$age  = 25;

//读取视图文件代码
$str = file_get_contents("./view.html");
//替换PHP标记为"{"或"}"
$str = str_replace('{','<?php echo ',$str);
$str = str_replace('}','?>',$str);
//将替换完成的字符串,再写入view.html
file_put_contents("view.html",$str);

//包含视图文件
include "./view.html";
controller.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HTML代码和PHP代码完全分离</title>
</head>
<body>
姓名:<?php echo $name?><br>
年龄:<?php echo $age?>
view.html

常用PHP模板引擎介绍

Smarty,是模板引擎鼻祖。其它的模板引擎都是基于Smarty开发的。
Template Lite
TinyButStrong
XTemplate
Savant
phemplate
Dwoo
Sugar
Twig,symfony框架默认的模板引擎;
FXL Template
H2o
ns-template
Blade:laravel框架默认的模板引擎。

Smarty快速入门

官网 https://www.smarty.net

Smarty是什么

Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。

第一个Smarty程序

<?php
//包含Smarty类文件
require_once("./Smarty/libs/Smarty.class.php");

//创建Smarty类的对象
$smarty = new Smarty();

//向视图赋值
$smarty->assign("name","张三丰");
$smarty->assign("age",24);

//显示视图文件
$smarty->display("./view.html");
controller.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Smarty模板引擎</title>
</head>
<body>
姓名:{$name}<br>
年龄:{$age}
view.html

 

 

 

 

  

 

 

 

 

 

  

posted @ 2019-10-10 10:12  沐风先生  阅读(133)  评论(0编辑  收藏  举报