smarty基础与实例

什么是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前端运行页面显示:

时间: 2024-11-16 07:28:29

smarty基础与实例的相关文章

6月3 Smarty基础读取配置

Smarty百科 Smarty是一个php模板引擎.更准确的说,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法.可以描述为应用程序员和美工扮演了不同的角色,因为在大多数情况下 ,他们不可能是同一个人.例如,你正在创建一个用于浏览新闻的网页,新闻标题,标签栏,作者和内容等都是内容要素,他们并不包含应该怎样去呈现.在Smarty的程序里,这些被忽略了.模板设计者们编辑模板,组合使用html标签和模板标签去格式化这些要素的输出(html表格,背景色,字体大小,样式表,等等).有一天程序员想要改

SQL 查询基础(2)-实例

上次说到SQL查询语句的逻辑执行过程,现在来用一个实例说明一下逻辑执行的过程. 前提:我们有三个表,分别记住客户信息.订单信息和产品信息 客户信息表:Customer ID,Name,Adress,PhoneNumber ID Name Adress PhoneNumber 1 CompanyA No.1 Street 123456 2 CompanyB No.2 Street 23453 3 CompanyC No.3 Street 45321 4 CompanyD No.4 Street 4

php教程之Smarty模板用法实例

分享下php之Smarty模板的使用方法. 剖析了smarty模板的使用方法,对于学习smarty的朋友有一定的参考价值. 详情如下: 一.模板中的注释每一个Smarty模板文件,都是通过Web前台语言(xhtml,css和javascript等)结合Smarty引擎的语法开发的.用到的web前台开发的语言和原来的完全一样,注释也没有变化.Smarty注释语法是'左结束符变量值*'和'*右结束符变量值',在这两个定界符之间的内容都是注释内容,可以包含一行或多行,并且用户浏览网页查看原代码时不会看

C#基础与实例教程最简单的C#快速入门教程【转自:http://www.82011433.com/Html/?6982.html】

c#基础与实例教程最简单的C#快速入门教程 在一小时内学会C#.使用例程,简单却完整的探索C#语言的构造和特点.本文特别适合有C++基础却没有太多精力学习C#的读者. 简介 C#是一种具有C++特性,Java样式及BASIC快速建模特性的编程语言.如果你已经知晓C++语言,本文将在不到一小时的时间内带你快速浏览C#的语法.如果熟悉Java语言,Java的编程结构.打包和垃圾回收的概念肯定对你快速学习C#大有帮助.所以我在讨论C#语言构造的时候会假设你知道C++. c#基础与实例教程最简单的C#快

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

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

Java 找出四位数的全部吸血鬼数字 基础代码实例

/** * 找出四位数的全部吸血鬼数字 * 吸血鬼数字是指位数为偶数的数字,能够由一对数字相乘而得到,而这对数字各包括乘积的一半位数的数字,当中从最初的数字中选取的数字能够随意排序. * 以两个0结尾的数字是不同意的. *   比例如以下列数字都是吸血鬼数字 1260=21*60 1827=21*87 2187=27*81 ... * 比較笨的低效率的做法: 遍历全部四位数, 每生成一个四位数的时候, *         在双重循环遍历两位数,在两位数的内层循环中推断是否与最外层循环的四位数相等

WinForm之BindingSource基础操作实例教程

通常我们在进行数据绑定的时候,常用的数据源有DataSet.DataTable.BindingList<T>.还有强类型数据源.今天我们来通过实例了解一下BindingSource组建,分享给大家供大家参考借鉴之用. BindingSource的两个用途: (1)首先,它提供一个将窗体上的控件绑定到数据的间接层.这是通过将 BindingSource 组件绑定到数据源,然后将窗体上的控件绑定到 BindingSource 组件来完成的.与数据的所有进一步交互(包括导航.排序.筛选和更新)都是通

C#反射之基础应用实例总结

本文将反射的东西整理了一下 , 提供了最全面的东西 , 当然也是基础的东西 , 在学好了这一切的基础上 , 大家可以学习反射的具体插件等应用 首先我们建立一个类库 , 将它生成为 reflectPrj .dll, 代码如下: using System; using System.Collections.Generic; using System.Text; namespace reflectPrj { /// <summary> /// 接口 /// </summary> publ

C#验证码识别基础方法实例分析

本文实例讲述了C#验证码识别基础方法,是非常实用的技巧.分享给大家供大家参考.具体方法分析如下: 背景 最近有朋友在搞一个东西,已经做的挺不错了,最后想再完美一点,于是乎就提议把这种验证码给K.O.了,于是乎就K.O.了这个验证码.达到单个图片识别时间小于200ms,500个样本人工统计正确率为95%.由于本人没有相关经验,是摸着石头过河.本着经验分享的精神,分享一下整个分析的思路.在各位大神面前献丑了. 再来看看部分识别结果如下图所示: 这里是不是看着很眼熟?下面再来具体分析一下. 处理第一步