why Smarty?
随着公司首页(以下简称首页)流量越来越大,最近开始考虑使用后台语言生成静态页面的技术。
我们知道,一个简单页面一般是一个 .html(或者 .htm 、.shtml)后缀的文件,然后在 html 页面中再引入一些 css 和 js。如果一个页面里全部是静态元素,那么打开速度会相当地快,但是首页的内容经常需要修改,部分内容还需要实时更新(一天三次),线上做法是将需要经常改动的模块做成接口,用 ajax 去请求然后渲染页面,但是这样做增加了服务器压力(每次打开都需要请求接口数据),而且增加了首页渲染的速度(请求+渲染),如果能用接口数据生成静态页面,就完美了,每次数据需要修改或者更新时,生成个静态页面,更新线上的静态页面,能极大地减轻服务器的压力。Smarty 正是能帮忙做这件事的利器!
实战
Smarty 是一个使用PHP写出来的模板引擎,具体介绍可以自行百度谷歌,这里只关心其基本用法。
我们先下载 Smarty,比如我下的是 "smarty-3.1.27" 版本,将其解压,放在 apache 的相关目录下。比如楼主放在了 wampserver 的 www 目录下,并将其重命名为 "smarty"。
假设我们的首页是这样一个简单页面:
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>hanzichi</title>
</head>
<body>
<p>hello world</p>
</body>
</html>
我们需要经常修改的是 title 的内容以及 p 标签内的内容。Smarty 规定需要动态生成的内容用 {$valueName}
的形式表示:
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>{$title}</title>
</head>
<body>
<p>{$content}</p>
</body>
</html>
我这里把上面的内容保存为 m.tpl,放在 "smarty\demo\templates" 目录下。
模板已经写完,我们还需要一个启动模板的 php 文件,我们在 "smarty\demo" 目录下新建个 "m.php" 的文件,内容如下(注意 assign() 的内容和 .tpl 中的内容对应,且只差个 $):
<?php
require '../libs/Smarty.class.php';
$smarty = new Smarty;
$smarty->assign("title", "hello, zichi");
$smarty->assign("content", "hello world");
$smarty->display('m.tpl');
?>
我们再在浏览器中打开 http://localhost/smarty/demo/m.php
,如果页面已经变成了 hello world,那么模板替换就成功了!
但是通常情况下我们要的是生成一个 .html 文件,可以先在 "smarty\demo" 目录下新建个 index.html 文件,然后把 m.php 替换成如下内容:
<?php
require '../libs/Smarty.class.php';
$smarty = new Smarty;
$smarty->assign("title", "hello, zichi");
$smarty->assign("content", "hello world");
$contect = $smarty->fetch("m.tpl");
$fp = fopen("index.html", "w");
fwrite($fp, $contect);
fclose($fp);
?>
最后再运行该 php 文件,那么 index.html 内容就自动被替换成有 'hello world' 的内容了!
当然,这只是最简单的 Smarty 模板替换,其他一些初级中级高级的应用还需要进一步探索!