smarty模版引擎

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了smarty模版引擎相关的知识,希望对你有一定的参考价值。

模板技术

         概述:一般情况下在html中实现某些动态数据显示功能时,会在HTML文件中插入一些php语句来实现动态数据显示的功能,但是PHP代码和HTML混编在一起不利于网站的改版和升级。因此模板机制便应运而生。

         基本原理

    技术分享

    视图文件

    在需要插入动态数据的部分使用一段特定的字符替代(此处使用了{$title}和{$content})

    技术分享 

    PHP文件

    第二步:数据库中提取相应的动态数据,赋给变量。此处省略从数据库中提取数据的部分

    第三步:加载视图文件的文本内容,并赋值给一个变量

    第四步:替换读取的视图文件文本内容相应的字符,此处为把{$title}替换成$title的值,把{$content}替换成$content的值

    第五步:输出替换完成的视图文件的文本

    得到运行结果:

    技术分享

    更进一步的优化方式:

    封装Smarty模板引擎文件:

    技术分享

    模板调用文件:

    技术分享

    这样优化编译后,使用模板调用文件编写视图文件中需要导入的数据的参,然后在调用模板引擎文件使得编写的参导入到视图文件中并显示。

    这样做的好处就是不用每次都编写替换语句,而且每个视图对应自己的模板调用文件,使得网站文件更加规范,同时维护也更加便利。

模板引擎:Smarty

Smarty文件及注意事项:

  1. 将libs文件夹复制至项目环境中,更名为smarty
  2. 在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模版引擎的主要内容,如果未能解决你的问题,请参考以下文章

smarty模版引擎

PHP模版引擎 – Twig

smarty模板引擎入门教程

js 模版引擎handlebars学习

前端数据模版引擎的总结

服务端模版注入漏洞检测payload整理