Smarty是一个PHP的模板引擎,提供让程序逻辑与页面显示(HTML/CSS)代码分离的功能。
smarty特点
- 速度:使用smarty可以获得最大速度的提高(相对于其它模板引擎技术)。
- 编译型:在下一次访问模板时直接访问编译文件,而不再进行模板重新编译。
- 缓存技术:可以将用户最终看到的HTML文件缓存成一个静态的HTML页。
- 插件技术:smarty可以自定义插件。插件实际就是一些自定义的函数。
- 强大的表现逻辑:模板中可以使用if/elseif/else/endif、foreach等。
Smarty基本语法
1.定界符(默认{})
- 任何在定界符之外的内容,都是静态的,是不会被解析的(包括php代码)
- { 和 $ 中间不能有任何空格,否则将不会解析。(右边则是可以的)
- 默认的定界符是可以修改的
问题:当在html页面引入css或js文件时,Smarty也会解析{}里面的内容;所以可以从以下方面解决:
(1)在{ $}在左{空一格;
(2)使用内置函数,将{}里面的内容包起来
<literal>
h3 {font-size:29px;}
</literal>
(3)更改定界符(修改smarty默认的属性值$smarty->left_delimiter="<{" ;$smarty->right_delimiter="}>" )
2.注释
格式:定界符* 内容*定界符 ;例如:{*你好*}
3.变量
php变量类型(422):
4个标量:整型、浮点型、字符串和布尔类型
2个复合型:数组和对象。
2个特殊类型:资源和NULL
(1)普通变量
Smarty声明普通变量的两种方法:
【1】在php文件中用$smarty->assign(名,值)这个方法声明,例如:$smarty->assign('name','Ling');
【2】在模板文件中声明,例如,在./templates/index.html目录下用{assign var='name' value='Ling'}
(2)保留变量($smarty)
用$smarty可以获取get、post、request、session、cookie、常量等值,例如:
【1】获得get提交的值:例如:{$smarty.get.name} $_GET
【2】 获得post提交的值 {$smarty.post.变量名} $_POST
【3】万能的获得值的方法 {$smarty.request.变量名} $_REQUEST
【4】
$_SESSION['country']='China';
在模板中获取会话
{$smarty.session.country}
【5】获取cookie
setcookies('country','China');
{$smarty.cookie.country}
【6】显示常量
{$smarty.const.city}
(3)配置变量
配置变量一般在./configs/smarty.conf目录中声明,然后在模板文件中引用配置变量;
{config_load file="smarty.conf"}
在配置文件中有主配置文件,也有章节配置文件,默认引用主配置文件,如果想要引用章节配置文件,可以通过{config_load file="smarty.conf" section='style1'}来引用,例如:
4.数组
(1)smarty访问数组的两种方法:
[1]数组[下标]
[2]数组.下标
例如:{$smarty[0]}、{$smarty.0}
(2)遍历数组(foreach和section)
{foreach $数组变量名 as $k=>$v}
如果不存在遍历的数组则执行{foreachelse}部分
foreach内部关键字
语法 | 描述 |
值变量@iteration | 从1开始的序号 |
值变量@index | 从0开始的索引 |
值变量@first | 判断是否是第一个元素 |
值变量@last | 判断是否最后一个元素 |
值变量@total | 数组的长度 |
值变量@show | 数组是否为空 |
|
|
用section只能遍历索引数组,不能遍历关联数组,用法与foreach一样。
5.smarty布局
在smarty文件夹中新建一个layout文件,用来存放通用模板。例如,要建立这样的布局时
可以新建一个template1.html模板,如下:
这时当你想更换某部分时内容时,可以在templates文件夹下的某个html文件下通过{block name='main1'}来替换
例如,在templates/index.html下更改右边的内容时,可以通过以下方法来实现:
{extends file="layout/template1.html"}
{block name='right'}
离离原上草
{/block}
{block name='right'}
离离原上草
{/block}
6.smarty缓存
为了提高网站的访问速度,如果每个用户访问一次,服务器就解析一次的话,速度会大打折扣,在smarty模板中的template_c下生成的文件并不是缓存文件,而是替换成php语法的文件,是含有<?php?>标记的,而缓存文件是纯粹的html文件,因此,我们必须开启smarty缓存文件。方法如下:
$smarty->caching=1;此时开启smarty缓存,调用display()的时候,如有有缓存就从缓存中读取,如果没有,就在cache目录下生成。
每当有模板文件修改时,就必须更新缓存文件。用$smarty->force_cache=true来强制更新。
还可以设置缓存文件的声明周期,用$smarty->cache_lifetime=?秒来设置