首页 > 代码库 > smarty模版引擎
smarty模版引擎
模板技术
概述:一般情况下在HTML中实现某些动态数据显示功能时,会在HTML文件中插入一些PHP语句来实现动态数据显示的功能,但是PHP代码和HTML混编在一起不利于网站的改版和升级。因此模板机制便应运而生。
基本原理:
视图文件
在需要插入动态数据的部分使用一段特定的字符替代(此处使用了{$title}和{$content})
PHP文件
第二步:数据库中提取相应的动态数据,赋给变量。此处省略从数据库中提取数据的部分
第三步:加载视图文件的文本内容,并赋值给一个变量
第四步:替换读取的视图文件文本内容相应的字符,此处为把{$title}替换成$title的值,把{$content}替换成$content的值
第五步:输出替换完成的视图文件的文本
得到运行结果:
更进一步的优化方式:
封装Smarty模板引擎文件:
模板调用文件:
这样优化编译后,使用模板调用文件编写视图文件中需要导入的数据的参,然后在调用模板引擎文件使得编写的参导入到视图文件中并显示。
这样做的好处就是不用每次都编写替换语句,而且每个视图对应自己的模板调用文件,使得网站文件更加规范,同时维护也更加便利。
模板引擎:Smarty
Smarty文件及注意事项:
- 将libs文件夹复制至项目环境中,更名为smarty
- 在libs文件夹中:
3.创建目录templates作为模板目录(smarty默认模板目录既templates)
4.模板文件中特殊标记边界符{}与其他代码(CSS的{})冲突,应在其他{}中左侧加空格。
5.当第一次调用smarty时,会创建一个目录templates_c,并在其中创建一个编译文件,当第二次调用smarty时,系统会判断当前smarty与templates_c中的文件是否一致,一致的化直接调用templates_c中的编译文件
6.smarty.class.php中的属性:left_delimiter和right_dilimiter分别对应特殊标记边界符的左右边界符号,且可以修改,默认为{}
7.模版文件的注释格式为:{*注释内容*}。且该注释文本不会出现在浏览器的源代码中
8.默认方法-> ①$smarty->assign(‘特殊标记’,$date)
视图文件中{$特殊标记}
把$date的值替换至{$特殊标记}的位置
②$arr = array(‘text1’,’text2’,text3);
$smarty->assign(‘特殊标记’,$arr);
视图文件中{$特殊标记[0]}{$特殊标记[1]}{$特殊标记[2]}
数组元素text1~text3的值分别替换至{$特殊标记[0]~[2]}的位置
调节变量器
cat:
引擎调用文件
模版文件:
显示结果:
结论:把多个字符进行拼接
date_format
引擎调用文件:
模板文件:
显示结果:
结论:把时间戳按照给定的格式进行转化
default
引擎加载文件:
模板文件:
结论:设置某个变量的默认值,当变量为空时,则显示默认值
lower和upper
格式:{$特殊标记|lower}
格式:{$特殊标记|upper}
结论:把对应变量的值全部转化为大写或小写
escape
格式:{$变量名|escape}
结论:浏览器将不解析变量中的(html等)标签,直接输出标签和其他文本
strip_tags
格式:{$特殊标记|strip_tags}
结论:浏览器将不解析变量中的(html等)标签,输出其他文本,不输出标签
nl2br
格式:{$特殊标记|nl2br}
结论:把变量中的\n转化为<br/>
replace
格式:{$特殊标记|replace:字符串1:字符串2}
结论:把变量中的字符串1全部替换成字符串2
string_format
格式:{$特殊标记|string_format:’%d’}
结论:把变量按照给定的格式输出
truncate
格式:{$特殊标记|truncate:字符串长度:’符号’}
结论:把变量截取指定长度的字符,其中结尾处用设定的符号结尾,并且符号的长度也计算在截取的长度之中,符号默认值为…。截取按照字节截取(一汉字=3字节)
e.g. 可以通过在php.ini中开启扩展:php_mbstring.dll使得截取字符时,按符号截取,而不是字符截取,此时(一单位截取长度 = 一汉字)
smarty系统变量
{$smarty.get.变量名称}
作用类似于get传递及获取
把get得到的变量的值输出相应位置
{$smarty.post.变量名称}
同上,为把通过post获取到的变量值输出相应的位置
{$smarty.cookies.变量名称}
把cookie中相应的变量的值输出相应的位置
{$smarty.session.变量名称}
把session中相应的变量的值输出相应的位置
{$smarty.now}
返回当前的时间戳
smarty内置语句
foreach
语法:
{foreach from=数组 item=元素的值的名 key=元素的键名 name=名称}
{foreachelse}
{/foreach}
include
语法:
{include file=”文件名”变量名=变量值}
if..elseif…else
语法:
{if 条件}
执行语句
{elseif 条件2}
执行语句
{else}
执行语句
{/if}
smarty模版引擎