什么是smarty?

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

为什么会诞生smarty?

例如在一个公司,一个应用程序的开发流程如下:在提交计划文档之后,界面设计者[美工]制作了网站的外观模型,然后把它交给后台程序员。程序员使用PHP实现商业逻辑,同时使用外观模型做成基本架构。然后工程被返回到HTML页面设计者继续完善。就这样工程可能在后台程序员和页面设计者之间来来回回好几次。由于后台程序员不喜欢干预任何有关HTML标签,同时也不需要美工们和PHP代码混在一起;美工设计者只需要配置文件,动态区块和其他的界面部分,不必要去接触那些错综复杂的PHP代码。因此,这时候有一个很好的模板支持就显得很重要了。

smarty主要优点:

1.速度:采用Smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。

2.编译型:采用Smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下)

3.缓存技术:Smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定Smarty的cache属性为true时,在Smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件。

4.插件技术:Smarty可以自定义插件插件实际就是一些自定义的函数。

5.模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。

不适合使用Smarty的地方:

需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新,这类型的程序使用smarty会使模板处理速度变慢。

小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用Smarty会在一定程度上丧失PHP开发迅速的优点。

(PS:不过为了整个项目的规范,请大家尝试去使用模板引擎。其实习惯了,开发速度会更加快,以上是没有用习惯模板引擎的开发者遇到的问题)

smarty简单示意图:

简单介绍smarty.class.php类的大体内容,如下:

 1 <?php
2
3 class Smarty //此类就是libs中的Smarty.class.php类
4 {
5 public $leftlimit="<{"; //左分隔符
6 public $rightlimit="}>";//右分隔符
7 public $attr; //存放变量信息的数组
8
9
10 //注册变量
11 function assign($k,$v)
12 {
13 $this->attr[$k] = $v; //向数组中添加一个值,相当于$sttr[0]="sdc123"
14 }
15
16 //显示模板
17 function display($name)
18 {
19 //1.造模板路径
20 $filename = $mubanlujing.$name;
21
22 //2.获取模板内容,内容是一大串代码,(例如模板为index.html)
23 $str=file_get_contents($filename);
24
25 /*$str里面的代吗内容
26 <html>
27 <head>
28 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
29 </head>
30 <body>
31 <div>{$aa}</div>
32 </body>
33 </html>
34 */
35
36 //3.用正则去匹配字符串中出现的{}里面的内容
37
38 //4.将内容读取(读取到的是数组里面的key),拿key去数组attr里面取value值
39
40 /*$str里面的代码内容
41 <html>
42 <head>
43 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
44 </head>
45 <body>
46 <div><?php echo $attr[key]?></div>
47 </body>
48 </html>
49 */
50
51 //5.将str里面的内容保存在缓存文件里面
52 file_put_contents($filename,$str);//$filename是新的文件
53
54 //6.将存储的文件加载到当前页面
55 include(filename);
56 }
57
58 }

配置文件init.inc.php:

 1 <?php
2
3 define("ROOT",str_replace("\\","/",dirname(__FILE__)).'/'); //常量ROOT中指定项目根目录
4
5 //echo str_replace("\\","/",dirname(__FILE__))."/";
6
7 require ROOT.'libs/Smarty.class.php'; //加载Smarty类文件
8
9 $smarty = new Smarty(); //实例化Smarty对象<br>
10
11
12 //$smarty -> auto_literal = false; //就可以让定界符号使用空格
13 $smarty->setTemplateDir(ROOT.'templates/'); //设置所有模板文件存放位置
14 //$smarty->addTemplateDir(ROOT.'templates2/'); //添加一个模板文件夹
15 $smarty->setCompileDir(ROOT.'templates_c/'); //设置编译过的模板存放的目录
16 $smarty->addPluginsDir(ROOT.'plugins/'); //设置为模板扩充插件存放目录
17 $smarty->setCacheDir(ROOT.'cache/'); //设置缓存文件存放目录
18 $smarty->setConfigDir(ROOT.'configs/'); //设置模板配置文件存放目录
19
20 $smarty->caching = false; //设置Smarty缓存开关功能
21 $smarty->cache_lifetime = 60*60*24; //设置缓存模板有效时间一天
22 $smarty->left_delimiter = '<{'; //设置模板语言中的左结束符
23 $smarty->right_delimiter = '}>'; //设置模板语言中的右结束符
24
25 ?>

smarty简单示例:

smarty后台代码main.php:

 1 <?php
2 //引入配置文件
3 include("./init.inc.php");
4
5 $name = "李四"; //字符串
6 $age = 22; //数字
7 $attr = array("淄博","张店");//索引数组
8 $arr=array("han"=>"汉族","hui"=>"回族");//关联数组
9
10 class Ren //类
11 {
12 public $name = "王五";
13 }
14
15 $r = new Ren();
16
17 //注册变量
18 $smarty->assign("name",$name);
19 $smarty->assign("age",$age);
20 $smarty->assign("dizhi",$attr);
21 $smarty->assign("minzu",$arr);
22 $smarty->assign("ren",$r);
23
24 $smarty->display("main.html");//显示模板

smarty前端代码 main.html:

 1 <body>
2 <h1>这是主页面</h1>
3 <div style="color:#09F">登陆者:<{$name}></div>
4
5 <div>年龄:<{$age}></div>
6
7 <div>地址:<{$dizhi[1]}></div>
8
9 <div>民族:<{$minzu["han"]}></div>
10 <div>民族:<{$minzu.hui}></div>
11
12 <div style="好友:<{$ren->name}></div>
13 </body>
14 </html>

smarty前端运行页面显示:

smarty基础与实例的更多相关文章

  1. AutoCAD ObjectARX(VC)开发基础与实例教程2014版光盘镜像

    AutoCAD ObjectARX(VC)开发基础与实例教程2014,最新版,光盘镜像 作者:张帆 朱文俊 编著 出版社:中国电力出版社 出版时间:2014年6月 点击一下

  2. Smarty基础用法

    一.Smarty基础用法: 1.基础用法如下 include './smarty/Smarty.class.php';//引入smarty类 $smarty = new Smarty();//实例化s ...

  3. 基础 jQuery 实例

    基础 jQuery 实例 jQuery 原则: 由于 jQuery 是为处理 HTML 事件而特别设计的,那么当您遵循以下原则时,您的代码会更恰当且更易维护: 把所有 jQuery 代码置于事件处理函 ...

  4. 6月3 Smarty基础读取配置

    Smarty百科 Smarty是一个php模板引擎.更准确的说,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法.可以描述为应用程序员和美工扮演了不同的角色,因为在大多数情况下 ,他们不可能是同 ...

  5. smarty基础原理

    smarty基础原理 一.html模板页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  6. expect基础及实例

    expect基础及实例 http://blog.csdn.net/zhuying_linux/article/details/6900805

  7. SVG基础绘图实例

    SVG可缩放矢量图(Scalable Vector Graphics),是使用 XML 来描述二维图形和绘图程序的语言,图像在放大或改变尺寸的情况下其图形质量不会有所损失,是万维网联盟的标准. 下面整 ...

  8. java基础学习05(面向对象基础01--类实例分析)

    面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过set ...

  9. jQuery基础与实例

    一.简介 1.什么是jQuery jQuery是一个轻量级.快速简洁的javaScript库,能让我们方便快捷的选择元素操作元素属性. 2.下载地址 3.jQuery使用方式 $("div& ...

随机推荐

  1. 如何安装并使用bower包依赖工具

    什么是bower Bower是一个客户端技术的软件包管理器,它可用于搜索.安装和卸载如JavaScript.HTML.CSS之类的网络资源.其他一些建立在Bower基础之上的开发工具,如YeoMan和 ...

  2. -webkit-tap-highlight-color处理元素点击默认高亮

    -webkit-tap-highlight-color:transparent; 或者 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);

  3. 未能加载文件或程序集"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad的真正解决办法

    未能加载文件或程序集"Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3 ...

  4. 自己通过centos6.5配置NFS 成功后的笔记,希望对需要的人有点点帮助吧!

         环境介绍:            服务器:centos  172.16.250.170            客户端:centos  172.16.250.172     先用rpm -qa ...

  5. spring、struts整合

    package com.hanqi.test; public class JISQ { public double add(double a,double b) { return (a+b); } } ...

  6. Vimperator技巧

    Vimperator技巧 什么是Vimperator?Firefox的一个插件,模拟vim操作. 1. 用]]打开"下一页"链接,[[打开"上一页"Vimper ...

  7. iosAPP打包上架xcode中Archive提交成功以后,不提示构建版本问题

    最近在项目更新时遇到Archive提交到开发者中心成功后,一直不提示构建版本信息,可能导致的原因是由于ios10以后对于APP中调用手机相册或摄像头麦克风时需要配置plist文件,配置如下内容或许会解 ...

  8. es6语法

    let定义变量,特性: 1,不允许重复定义 2,不存在预解析 3,变量存在于会块级作用域 即{}内部 const : 定义常量,常量的值不能修改,若常量是对象 对象下的属性可修改. 解构赋值语法: 数 ...

  9. ABAP字符串操作 截取字符长度 取位数

    ABAP字符串操作   ABAP對字串的操作方法與其他語言的操作有較大差別,以下是較常用的對字串操作的方法: 1. 字串的連接:CONCATENATEDATA: t1 TYPE c LENGTH 10 ...

  10. SSLv3协议、TLSv1.2协议配置不对导致javax.ws.rs.ProcessingException: java.net.SocketException: Connection reset

    SSl:Secure Sockets Layer 安全套接层 TLS:Transport Layer Security传输层安全 是为网络通信提供安全及数据完整性的一种安全协议.TLS与SSL在传输层 ...