why Smarty?


随着公司首页(以下简称首页)流量越来越大,最近开始考虑使用后台语言生成静态页面的技术。

我们知道,一个简单页面一般是一个 .html(或者 .htm 、.shtml)后缀的文件,然后在 html 页面中再引入一些 css 和 js。如果一个页面里全部是静态元素,那么打开速度会相当地快,但是首页的内容经常需要修改,部分内容还需要实时更新(一天三次),线上做法是将需要经常改动的模块做成接口,用 ajax 去请求然后渲染页面,但是这样做增加了服务器压力(每次打开都需要请求接口数据),而且增加了首页渲染的速度(请求+渲染),如果能用接口数据生成静态页面,就完美了,每次数据需要修改或者更新时,生成个静态页面,更新线上的静态页面,能极大地减轻服务器的压力。Smarty 正是能帮忙做这件事的利器!

实战


Smarty 是一个使用PHP写出来的模板引擎,具体介绍可以自行百度谷歌,这里只关心其基本用法。

我们先下载 Smarty,比如我下的是 "smarty-3.1.27" 版本,将其解压,放在 apache 的相关目录下。比如楼主放在了 wampserver 的 www 目录下,并将其重命名为 "smarty"。

假设我们的首页是这样一个简单页面:

  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html;charset=utf-8">
  4. <title>hanzichi</title>
  5. </head>
  6. <body>
  7. <p>hello world</p>
  8. </body>
  9. </html>

我们需要经常修改的是 title 的内容以及 p 标签内的内容。Smarty 规定需要动态生成的内容用 {$valueName} 的形式表示:

  1. <html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html;charset=utf-8">
  4. <title>{$title}</title>
  5. </head>
  6. <body>
  7. <p>{$content}</p>
  8. </body>
  9. </html>

我这里把上面的内容保存为 m.tpl,放在 "smarty\demo\templates" 目录下。

模板已经写完,我们还需要一个启动模板的 php 文件,我们在 "smarty\demo" 目录下新建个 "m.php" 的文件,内容如下(注意 assign() 的内容和 .tpl 中的内容对应,且只差个 $):

  1. <?php
  2. require '../libs/Smarty.class.php';
  3. $smarty = new Smarty;
  4. $smarty->assign("title", "hello, zichi");
  5. $smarty->assign("content", "hello world");
  6. $smarty->display('m.tpl');
  7. ?>

我们再在浏览器中打开 http://localhost/smarty/demo/m.php,如果页面已经变成了 hello world,那么模板替换就成功了!

但是通常情况下我们要的是生成一个 .html 文件,可以先在 "smarty\demo" 目录下新建个 index.html 文件,然后把 m.php 替换成如下内容:

  1. <?php
  2. require '../libs/Smarty.class.php';
  3. $smarty = new Smarty;
  4. $smarty->assign("title", "hello, zichi");
  5. $smarty->assign("content", "hello world");
  6. $contect = $smarty->fetch("m.tpl");
  7. $fp = fopen("index.html", "w");
  8. fwrite($fp, $contect);
  9. fclose($fp);
  10. ?>

最后再运行该 php 文件,那么 index.html 内容就自动被替换成有 'hello world' 的内容了!

当然,这只是最简单的 Smarty 模板替换,其他一些初级中级高级的应用还需要进一步探索!

用 Smarty 生成静态页面入门介绍的更多相关文章

  1. 浅谈php生成静态页面

    一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权 ...

  2. PHP生成静态页面的方法

          在PHP网站开发中为了网站推广和SEO等需要,需要对网站进行全站或局部静态化处理,PHP生成静态HTML页面有多种方法,比如利用PHP模板.缓存 等实现页面静态化,今天就以PHP实例教程形 ...

  3. .net 生成 静态页面

    .net 生成 静态页面 <!--Main.Aspx--> <%@ page language="C#" %> <%@ import namespac ...

  4. 比较详细PHP生成静态页面教程

    一,PHP脚本与动态页面. PHP脚本是一种服务器端脚本程序,可通过嵌入等方法与HTML文件混合, 也可以类,函数封装等形式,以模板的方式对用户请求进行处理.无论以何种方式,它的基本原理是这样的.由客 ...

  5. PHP代码为什么不能直接保存HTML文件——&gt;PHP生成静态页面教程

    1.server会依据文件的后缀名去进行解析,假设是HTML文件则server不会进行语法解析.而是直接输出到浏览器. 2.假设一个页面中所有都是HTML代码而没有须要解析的PHP语法,则没有必要保存 ...

  6. PHP生成静态页面详解

    PHP生成静态页面详解 看到很多朋友在各个地方发帖问PHP生成静态文章系统的方法,以前曾做过这样一个系统,遂谈些看法,以供各位参考.好了,我们先回顾一些基本的概念. 一,PHP脚本与动态页面. PHP ...

  7. PHP代码为什么不能直接保存HTML文件——>PHP生成静态页面教程

    1.服务器会根据文件的后缀名去进行解析,如果是HTML文件则服务器不会进行语法解析,而是直接输出到浏览器. 2.如果一个页面中全部都是HTML代码而没有需要解析的PHP语法,则没有必要保存为PHP文件 ...

  8. .NET生成静态页面并分页

    因为公司的产品用asp开发, 前一段时间用asp写了一个生成静态页面并分页的程序,但缘于对.net的热爱,写了这个.net下的生成静态页面并分页的程序. 主要的原理就是替换模板里的特殊字符. 1.静态 ...

  9. C#根据网址生成静态页面

    HoverTree开源项目中HoverTreeWeb.HVTPanel的Index.aspx文件 是后台管理的首页. 包含生成留言板首页,以及显示用户名,退出等功能. 根据网址生成页面的方法: boo ...

随机推荐

  1. Java触发器CronTrigger

    摘要:如果需要像日历那样按日程来触发任务,而不是像SimpleTrigger 那样每隔特定的间隔时间触发,CronTriggers通常比SimpleTrigger更有用. 一.web.xml: < ...

  2. jQuery简单入门(五)

    5.Ajax应用 在jQuery中$ajax()方法属于最底层的方法,第二层是load().$.get().$.post(),第三层是$.getScript()和 $.getJSON():下面根据使用 ...

  3. Java设计模式 - 观察者模式

    定义 观察者模式属于对象行为型模式. 在对象之间定义一对多的依赖,这样一来当一个对象改变状态,依赖它的对象都会收到通知并自动更新. 优点 1.  主题和观察者之间抽象耦合.无论什么对象主要实现了特定的 ...

  4. C+命令行+方向键=简易版扫雷

    前言: 想起来做这个是因为那时候某天知道了原来黑框框里面的光标是可以控制的,而且又经常听人说起这个,就锻炼一下好了. 之前就完成了那1.0的版本,现在想放上来分享却发现有蛮多问题的,而且最重要的是没什 ...

  5. x01.os.8: 加载内核

    在 x01.os.7 中,借助 freedos,学习了保护模式.但操作系统必须完成引导:boot, 加载内核:loader,kernel,进而管理process,memory,file等. 引导比较简 ...

  6. linux 接口地址全部清除才清理从此接口发出的下一跳路由

    接口地址全部清除才清理从此接口发出的下一跳路由 如: eth7配置两个地址 eth7: 192.168.1.1 10.1.1.1 添加一条路由: route add -net 2.2.2.0/24 g ...

  7. centos---无线上网的电脑所安装的虚拟机网络设置

    1.共享设置 找到本地的无线网卡,右键---属性---共享,设置如下 2.修改VMware Network Adapter VMnet1 选中VMware Network Adapter VMnet1 ...

  8. 通过vmstat命令判断服务器瓶颈

    linux命令vmstat介绍 vmstat介绍 通过STATSPACK收集服务器信息,主要通过收集VMSTAT的信息来展现服务器状况.VMSTAT工具是最常见的UNIX监控工具,可以展现给定时 间间 ...

  9. cloudera cdh native lib

    如果通过命令行的方式安装cloudera 版本的hadoop,下载它的cdh版本. 解压后执行,你会发现报warning,没有native的库,lib/native是空的. 如何获取native的文件 ...

  10. [转]ASP.NET MVC4+BootStrap 实战(一)

    本文转自:http://leelei.blog.51cto.com/856755/1587301 好久没有写关于web开发的文章了,进到这个公司一直就是winform和Silverlight,实在是没 ...