smarty是什么?

Smarty是一个使用PHP写出来的模板引擎,是业界最著名的PHP模板引擎之一。Smarty分离了逻辑代码和外在的内容,提供一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。Smarty工作的目的是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。简单来说:Smarty是PHP的一个引擎模板,可以更好的进行逻辑与显示的分离,即我们常说的MVC,这个引擎的作用就是将C分离出来。【mvc 三层架构思想;m=》model模型、v=》view视图、c=》controller控制】

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开发迅速的优点。

如何使用smarty?

首先我们去下载一个smarty的压缩包。下载地址https://codeload.github.com/smarty-php/smarty/zip/v3.1.33,然后我们得到了一个压缩包,进行解压后,里面有如下文件:

我们只需要其中的libs文件,注意不要对其中的文件进行任何的修改。直接将其拖拽至你创建的网站根目录下。并且需要再创建几个文件夹:cache(存放缓存文件)、templates(存放模板文件)、templates_c(存放混编文件)、configs(存放配置文件);这几个文件夹只是默认名称,你也可以根据需要进行修改,但要注意如果你修改了文件夹名称,需要打开libs文件夹下的Smarty.class.php文件,对其中的文件夹路径进行修改。如下找到文件夹名称修改即可:

做完上述步骤后,在根目录下创建PHP逻辑代码文件,此处我取名为index.php,并打开,写入下面的代码:

//1.引入smarty类
require './libs/Smarty.class.php';
//2.实例化smarty类
$smarty = new smarty(); //var_dump($smarty);//打印一下 看是否有结果 //3.根据业务连接数据库
$con = mysql_connect('127.0.0.1','root','root');
mysql_query('use news');
mysql_query('set names utf8'); //4.sql语句
$sql = "select * from news";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)) {
$arr[]=$row;
} //print_r($arr);//打印一下 看是否有结果 //5.发送数据
$smarty->assign('news',$arr); //6.显示视图页面 要显示哪个页面就写哪个页面路径
$smarty->display('news_list.html');

上述代码中,因为我们读取的是数据库中的数据,因此需要连接数据库,查询信息,并把结果读取出来,在这里建库根据自己的业务建立就可以了。我只是建立了一个简单的新闻表news。

第五部分,用$smarty这个对象指向assign给变量赋值。

赋值的方式有两种,第一种就像如上代码一样在php中用assign赋值,第二种是在html中用{assign var='name'  value='值'} ;

第六部分,指向display展示视图。

在templates文件夹下创建视图文件,名称要与php代码中的视图名称一致。写入html代码即可。

<html>
<head><title>新闻列表</title></head>
<meta charset='utf-8'>
<body>
<table border="1px">
<th>新闻id</th>
<th>新闻title</th>
<th>新闻content</th>
<th>新闻time</th>
{foreach $news as $k=>$v}
<tr>
<td>{$v['id']}</td>
<td>{$v['title']}</td>
<td>{$v['content']}</td>
<td>{$v['time']}</td>
</tr>
{/foreach}
</table>
</body>
</html>

注意,PHP代码中第五步发送的数据名称与HTML中的要一致,在HTML中写变量用{    }包裹即可,其中{$v['id']}等也可以写成{$v.id}。

最终效果如下:

同时,在templates_c文件夹中也生成了一个混编文件:

补充内容:

1.if else 语句怎样写?

{if $v['status'] eq 1}
正在发布
{else if $v['status'] eq 2}
已下线
{/if}

if在smarty中是双标签{if}和{/if},$v['status']是变量,eq是==的意思,运算符对照表如下:

2.获取当前时间戳{$smarty.now}

3.直接访问PHP常量{$smarty.const.常量名}

4.使用smarty访问PHP中的超全局数组变量:

$_GET=>{$smarty.get.name}

$_POST=>{$smarty.post.name}

$_COOKIE=>{$samrty.cookies.name}

等等。

5.时间戳转化时间格式

{$samrty.now|date_format:"%y-%m-%d %T"}

对照表:

%a - 当前区域星期几的简写
%A - 当前区域星期几的全称
%b - 当前区域月份的简写
%B - 当前区域月份的全称
%c - 当前区域首选的日期时间表达
%C - 世纪值(年份除以 100 后取整,范围从 00 到 99)
%d - 月份中的第几天,十进制数字(范围从 01 到 31)
%D - 和 %m/%d/%y 一样
%e - 月份中的第几天,十进制数字,一位的数字前会加上一个空格(范围从 ' 1' 到 '31')
%g - 和 %G 一样,但是没有世纪
%G - 4 位数的年份,符合 ISO 星期数(参见 %V)。和 %V 的格式和值一样,只除了如果 ISO 星期数属于前一年或者后一年,则使用那一年。
%h - 和 %b 一样
%H - 24 小时制的十进制小时数(范围从 00 到 23)
%I - 12 小时制的十进制小时数(范围从 00 到 12)
%j - 年份中的第几天,十进制数(范围从 001 到 366)
%m - 十进制月份(范围从 01 到 12)
%M - 十进制分钟数
%n - 换行符
%p - 根据给定的时间值为 `am' 或 `pm',或者当前区域设置中的相应字符串
%r - 用 a.m. 和 p.m. 符号的时间
%R - 24 小时符号的时间
%S - 十进制秒数
%t - 制表符
%T - 当前时间,和 %H:%M:%S 一样
%u - 星期几的十进制数表达 [1,7],1 表示星期一
%U - 本年的第几周,从第一周的第一个星期天作为第一天开始
%V - 本年第几周的 ISO 8601:1988 格式,范围从 01 到 53,第 1 周是本年第一个至少还有 4 天的星期,星期一作为每周的第一天。(用 %G 或者 %g 作为指定时间戳相应周数的年份组成。)
%W - 本年的第几周数,从第一周的第一个星期一作为第一天开始
%w - 星期中的第几天,星期天为 0
%x - 当前区域首选的时间表示法,不包括时间
%X - 当前区域首选的时间表示法,不包括日期
%y - 没有世纪数的十进制年份(范围从 00 到 99)
%Y - 包括世纪数的十进制年份
%Z 或 %z - 时区名或缩写
%% - 文字上的 `%' 字符

6.其他

获取配置变量:{$smarty.config}

返回当前模板名称:{$smarty.template}

返回当前模板对象:{$smarty.template_object}

返回当前目录名称:{$smarty.current_dir}

7.将变量转换为大小写

小写

<{$articleTitle|lower}>

大写

<{$articleTitle|upper}>

8.调用对象

也是使用->属性调用,如{$obj->name};

2019-07-24 Smarty模板引擎的简单应用的更多相关文章

  1. 前端学PHP之Smarty模板引擎

    前面的话 对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进. ...

  2. PHP之Smarty模板引擎

    前面的话 对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进. ...

  3. MVC开发模式以及Smarty模板引擎的使用

    Linux 全局安装 composer 将目录切换到/usr/local/bin/目录 cd /usr/local/bin/ 在 bin 目录中下载 composer curl -sS https:/ ...

  4. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)

    前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...

  5. 深入浅出之Smarty模板引擎工作机制(二)

    源代码下载地址:深入浅出之Smarty模板引擎工作机制 接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解. Smarty模板引擎的原理,其实是这么一个过程: ...

  6. 深入浅出之Smarty模板引擎工作机制(一)

    深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解. ...

  7. Smarty模板引擎技术

    Smarty模板引擎技术 什么是模板引擎? 什么是Smarty模板引擎? 为何选择Smarty模板引擎? 如何使用Smarty模板引擎? 一.历史背景 场景一:回顾之前编写PHP项目的方式 //链接数 ...

  8. Smarty模板引擎的使用

    Smarty模板引擎的使用 Smarty是PHP中一个基于MVC模式的模板引擎. Download: http://www.smarty.net/download   特点 1.  最快速度的程序开发 ...

  9. smarty模板引擎

    1.    使用smarty 1.1 项目引入 // 3, 连接数据库,提取相关数据 $title = "Smarty模板引擎"; $content = "Smarty模 ...

随机推荐

  1. 第08组 Alpha冲刺(1/4)

    队名 八组评分了吗 组长博客 小李的博客 作业博客 作业链接 组员1(组长) 过去两天完成了哪些任务 文字/口头描述 11月9号开小会安排alpha冲刺开始的工作,进行任务分工,具体见11.09会议记 ...

  2. Kibana自动关联ES索引

    原因: Kibana中关联ES索引需要手动操作,如果ES中索引较多(如每天生成),则工作量会比较大. 方法: 考虑使用Linux的cron定时器自动关联ES索引,原理是调用Kibana API接口自动 ...

  3. Python 使用scapy 时报:ImportError: cannot import name 'NPCAP_PATH' 解决

    解决办法:下载源码 https://github.com/secdev/scapy 下载完成后解压后里面有个scapy文件夹,把这个文件夹替换\Lib\site-packages\ 下的scapy 整 ...

  4. 【Laravel基础】laravel基础之相关概念,自定义服务提供者:Contracts, ServiceContainer, ServiceProvider, Facades关系

    Contracts, ServiceContainer, ServiceProvider, Facades关系 概念 Contracts 合同,契约,也就是接口,定义一些规则,每个实现此接口的都要实现 ...

  5. springboot响应消息(http)的编码设置

    一.方式一 在单个REST接口上设置 @ResponseBody @RequestMapping(value = "sys/getTree1",method = RequestMe ...

  6. Openresty与Tengine

    Tengine官方网站:http://tengine.taobao.org/index_cn.html OpenResty官方网站:http://openresty.org/ Openresty和Te ...

  7. kotlin基础 空值检查

    NULL检查机制 Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式,字段后加!!像Java一样抛出空异常,另一种字段后加?可不做处理返回值为 null或配合?:做 ...

  8. Java类成员初始化顺序

    类中包含7中成员:1.静态变量 static2.final静态常量 final static3.静态代码块 static{}  //多个代码块顺序执行 4.普通变量5.普通代码块 {}  //多个代码 ...

  9. Oracle 11g R2手动配置EM(转)

    转自:http://blog.itpub.net/9034054/viewspace-1973418/ Oracle 11g R2手动配置EM Oracle 作者:luashin 时间:2016-01 ...

  10. 【GMT43智能液晶模块】例程十六:LAN_TCPS实验——以太网数据传输

    源代码下载链接: 链接:https://pan.baidu.com/s/1e5Qp-xASjlA0pje3S7TdIg提取码:9v37 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43购 ...