博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
smarty 基本介绍及示例
阅读量:6756 次
发布时间:2019-06-26

本文共 3498 字,大约阅读时间需要 11 分钟。

什么是smarty?

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

为什么会诞生smarty?

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

smarty主要优点:

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

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

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

4.技术:Smarty可以。实际就是一些的函数。

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

不适合使用Smarty的地方:

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

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

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

smarty简单示意图:

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

1 
";//右分隔符 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 27 28
29 30 31
{$aa}
32 33 34 */35 36 //3.用正则去匹配字符串中出现的{}里面的内容37 38 //4.将内容读取(读取到的是数组里面的key),拿key去数组attr里面取value值39 40 /*$str里面的代码内容41 42 43
44 45 46
47 48 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 
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 
"汉族","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  2 

这是主页面

3
登陆者:<{
$name}>
4 5
年龄:<{
$age}>
6 7
地址:<{
$dizhi[1]}>
8 9
民族:<{
$minzu["han"]}>
10
民族:<{
$minzu.hui}>
11 12
好友:<{
$ren->name}>
13 14

 

smarty前端运行页面显示:

 

转载于:https://www.cnblogs.com/ds-3579/p/5559483.html

你可能感兴趣的文章
什么是面向对象思想
查看>>
Quick-cocos2d-x3.3 Study (十六)--------- 碰撞检测,事件监听,设置掩码
查看>>
tomcat 安装
查看>>
C#调用c++创建的dll
查看>>
12.02个人博客
查看>>
Notification通知代码简洁使用
查看>>
UIView 动画
查看>>
ssh加密公私钥
查看>>
快速部署Python应用:Nginx+uWSGI配置详解
查看>>
mybatis-generator生成数据对象
查看>>
java Queue中 add/offer,element/peek,remove/poll区别
查看>>
一个继承了抽象类的普通类的执行顺序
查看>>
Map集合中key不存在时使用toString()方法、valueOf()方法和强制转换((String))之间的区别...
查看>>
ArcIMS 开发学习笔记(一)
查看>>
leetcode_1095. Find in Mountain Array_[Binary Search]
查看>>
关于搭建haddoop分布式系统的全部过程复习
查看>>
简单使用SOCKET,TCP,UDP模式之间的通信
查看>>
js历史返回
查看>>
JavaWeb之JavaMail
查看>>
430. Flatten a Multilevel Doubly Linked List - Medium
查看>>