• Smarty模版引擎的原理


      Smarty是一个使用php写出来的模版引擎,用来将原本与html代码混杂在一起PHP代码逻辑分离,实现前后端分离。

    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。在模板文件使用判断语句可以非常方便的对模板进行格式重排。
    (下面的部分转载自他人博客...)

    分析模板技术:是利用php语言读取模板文件完成字符串替换掉的过程

    详解代码如下:

    复制代码
    html页面:
    <body>
    <font color = 'red'>{id}</font><br>
    <font color = 'green'>{name}</font><br>
    <font color = 'bule'>{age}</font><br>
    </body>
    
    
    后台逻辑部分
    //
    $id=8;
    $name='zhangsan';
    $age = 12;
    
    $str = file_get_contents('demo1.html');//模板文件的所有内容
    $str = str_replace('{id}', $id, $str);//替换id
    $str  = str_replace('{name}', $name, $str);
    $str = str_replace('{age}', $age, $str);
    echo $str;
    ?>
    复制代码

     面向对象技术实现模板功能的封装

    复制代码
     1 <?php
     2 class Template
     3 {
     4     //属性
     5     public $vars;                        //保存要替换的标记和数据的内容
     6     public $left_delimiter = '{*';        //左分隔符
     7     public $right_delimiter = '*}';        //右分隔符
     8     //方法
     9     public function assign($key,$value)
    10     {
    11         
    12         $this->vars[$key] = $value;
    13     }
    14     public function display($file)     //file表示模板名
    15     {
    16         $str = file_get_contents($file);    //从模板中读取多有内容,并将内容放入$str中
    17         foreach ($this->vars as $key => $value) //$key 键名(模板标记) $value 值
    18         {
    19             $str = str_replace($this->left_delimiter.$key.$this->right_delimiter, $value, $str);
    20         }
    21         echo $str;
    22         //file_put_contents('bak.html', $str);
    23     }
    24 }
    25 ?>
    复制代码

    注意:assign(‘name’,’zhangsan’);这句的时候其实还没有进行数据替换,而是把传入的数据保存在vars[]中,当display的时候才进行数据替换

  • 相关阅读:
    Codeforces 812E Sagheer and Apple Tree
    bzoj 4765: 普通计算姬
    bzoj 4552: [Tjoi2016&Heoi2016]排序
    bzoj 1096: [ZJOI2007]仓库建设
    bzoj 1030: [JSOI2007]文本生成器
    bzoj 1095: [ZJOI2007]Hide 捉迷藏
    JS实现HashMap
    A4纸表格打印
    JAVA字符串格式化-String.format()的使用
    证书打印CSS知识点总结
  • 原文地址:https://www.cnblogs.com/bujianchenxi/p/6204017.html
Copyright © 2020-2023  润新知