(笔记)php-smarty模板引擎

一、模板引擎简介


什么是模板?
所谓模板就是指无PHP代码,只有HTML+CSS+JS。
什么是模板引擎?
模板引擎主要工作就是对我们的模板(界面)与业务逻辑(PHP代码)相分离的一种解决方案。

二、如何去开发一个模板引擎


如何将PHP与HTML分离出来,想以前学过那些文件操作函数。
demo03.php demo03.html


(笔记)php-smarty模板引擎_第1张图片
demo03.php

(笔记)php-smarty模板引擎_第2张图片
demo03.html

三、封装自己的模板引擎


思路:
1、首先进行html页面与php页面分离
2、分配变量到模板页面
3、输出显示

';
    public $Template_dir="./";//./表示当前路径
        /**
         * 自定义模板框架*/
    /**
     * 定义一个方法来分离html和php代码
     * @param $name 表示标签
     * @param $value 表示替换的值*/
    public function assign($name,$value) {
        $this->data[$name]=$value;
    }
    //显示内容
    public function display($file){
        //获取html文件
        $str = file_get_contents($this->Template_dir.$file);
        
        foreach($this->data as $key=>$val){
            
            $str = str_replace($this->left_limiter.$key.$this->right_limiter, $val, $str);
        }
        echo $str;
        
    }
}

?>

下面我们讲smarty模板


四、smarty模板

smarty是基于PHP开发的PHP模板引擎,他提供了逻辑与外在内容的分离

1、smarty的特点

  • 速度:相对于其他模板引擎,smarty可以提供更快响应速度
  • 编译型:把模板文件替换成一个HTML+PHP混合样式的PHP文件,当下模板没有改变,将自动转向导编译文件
  • 缓存技术:实际上是把最终显示的页面文件,在一定的缓存时间内,生成静态html文件,当我们访问访问模板文件,将直接转向到静态页面html
  • 插件技术:该模板引擎,可以自定义(函数),非常灵活

  • 以下不适用于模板引擎

  • 实时更新 比如:股票,天气预报
  • 2、smarty下载和安装

    下载smarty

    (笔记)php-smarty模板引擎_第3张图片
    文件减压后

    文件说明:
    demo:系统提供的实例文件
    libs:核心文件
    

    3、libs目录分析

    (笔记)php-smarty模板引擎_第4张图片
    libs目录
    libs目录说明:
    plugins:自定义插件文件夹
    sysplugins:系统插件文件夹
    debug.tpl:调试模板
    Smarty.class.php:Smarty3.0中的核心类文件
    $martyBC.class.php:向后兼容类,Smarty2.0版本
    

    4、Smarty配置

    1)复制libs文件夹到项目目录下,改名为smarty方便以后使用
    2)配置系统默认文件夹,虽然运行过程,系统可以自动生成,但是,建议大家手动创建文件夹,如果在linux中,对我们的目录没有写权限的,所以要先建好相应的目录,目录参考smarty.class.php中


    (笔记)php-smarty模板引擎_第5张图片
    创建目录的文件
    创建的目录:
    templates:定义默认模板文件夹
    templates_c:定义编译目录
    cache:定义缓存文件夹
    configs:定义默认配置文件夹
    

    5、编译原理

    如何判断模板文件是否改变?

    文件在系统中的表现形式有三个时间:
    创建时间:ctime
    修改时间:mtime
    访问时间:atime
    

    判断是否改变的依据是采用修改时间,判断修改时间是否有改变,改变就是模板发生了变化,否则就没改变

    (笔记)php-smarty模板引擎_第6张图片
    编译原理图

    smarty开发流程
    1)把libs核心文件包含到我们当前项目中,并改名为smarty
    2)创建业务逻辑页面PHP页面和HTML模板页面
    3)在PHP中,包含Smarty.class.php文件到当前页面
    4)实例化对象
    5)分配变量到模板文件assign($name,$value)
    6)显示输出display($file)
    smarty开发流程图
    (笔记)php-smarty模板引擎_第7张图片
    demo01.php

    (笔记)php-smarty模板引擎_第8张图片
    demo01.html

    6、smarty中相关属性和方法

    1、左右定界符


    (笔记)php-smarty模板引擎_第9张图片
    左右定界符

    修改左右定界符

    (笔记)php-smarty模板引擎_第10张图片
    Paste_Image.png

    2、相关方法

    assign($name,$value)
    解析:assign函数分配变量到模板文件,$name标记名 $value赋的值
    display($file)
    解析:显示并输出相应的模板$file代表模板文件路径
    

    3、常用路径设置

  • setTemplateDir()
  • setCompileDir()
  • setConfigDir()
  • setCacheDir()

  • 由于很多自定义系统不想采用默认的设置路径,那么可以通过set方法来定义目录结构


    (笔记)php-smarty模板引擎_第11张图片
    自定义目录结构

    五、设计篇

    1、注释

    语法:{*注释代码*}
    
    (笔记)php-smarty模板引擎_第12张图片
    注释示例代码

    2、变量
    2.1、从PHP中分配的变量

    $smarty->assign('title',$title);
    //2、分配一维数组变量到模板
    $lamp = array('linux','Apache','Mysql','PHP');
    $smarty->assign('lamp',$lamp);
    //3、分配二维数组到模板
    $person = array(
        array('name'=>'ly','age'=>'20','address'=>'cz'),
        array('name'=>'ly','age'=>'20','address'=>'cz'),
        array('name'=>'ly','age'=>'20','address'=>'cz')
    );
    $smarty->assign('person',$person);
    //4、分配对象到模板
    class Person{
        public $name;
        public function speak(){
            echo $this->name.'在说话...';
        }
    }
    $user = new Person();
    $user->name = 'ly';
    $smarty->assign('user',$user);
    

    模板页

    
    
    

    {$title}


    {*一维数组的调用方法*} lamp中的l:{$lamp[0]}
    lamp中的a:{$lamp[1]}
    lamp中的m:{$lamp[2]}
    lamp中的p:{$lamp[3]}
    {*二维数组的调用方法*} {$person[0]['age']}---{$person[0]['address']}
    {*对象的调用方法*} {$user->speak()}

    2.2、从配置文件中读取变量

    语法:{config_load file ="file.conf"}
    

    file:配置文件路径
    调用的方法:{#变量名#} 或 {$smarty.config.变量名}


    调用配置文件中的变量

    2.3在模板文件中创建

    {assign var='变量名称' value='变量的值'}
    
    (笔记)php-smarty模板引擎_第13张图片
    Paste_Image.png
    {变量 = 变量值}
    
    Paste_Image.png

    扩展


    Paste_Image.png

    3、smarty中保留变量

    $smarty.get.page相当于$_GET['page']
    $smarty.post.page 相当于 $_POST['page']
    $smarty.cookies.username 相当于 $_COOKIES['username']
    $smarty.server.SERVER_NAME 相当于 $_SERVER['SERVER_NAME']
    $smarty.env.Path 相当于 $_ENV['Path']
    $smarty.session.id 相当于 $_SESSION['id']
    $smarty.request.username 相当于 $_REQUEST['username']
    $smarty.now 获取当前时间戳
    {$smarty.now|date_format:’%Y-%m-%d %H:%M:%S’}
    

    (笔记)php-smarty模板引擎_第14张图片
    Paste_Image.png

    4、变量调节器
    什么是变量调节器
    实际上就是一些函数,这些函数的功能就是对变量进行格式化

    {$var|capitalize} 首字母大写
    {$var|count_characters:true} 字符计数
    {$var|cat:var2} 连接字符串
    {$var|count_paragraphs} 段落计数
    {$var|count_sentences} 句子计数
    {$var|count_words} 计算词数
    {$var|data_format:"%Y%m%d"} 时间格式化
    {$var|default:"value"} 如果变量为空或为定义,那么采用默认值
    {$var|escape} 编译转码
    {$var|indent:10:"*"} 首行缩进,后面的参数表示每个缩进字符要放的字符
    {$var|lower} 字符串小写
    {$var|nl2br} \n转
    {$var|regex_replace:"/[\t\n]/",""} 正则替换 {$var|spacify:"^^"} 在字符之间插入相应字符如^^ {$var|string_format:'%d'} 字符串格式化 {$var|strip:'*'} 去掉重复空格 {$var|strip_tags} 去除html标签 {$var|truncate:30:'...'}:字符串截取,注意,优缺点 {$var|upper} 大写 {$var|wordwrap:30:'
    '} 行宽约
    (笔记)php-smarty模板引擎_第15张图片
    实例代码

    5、系统内建函数

    1capture

    语法:
    {capture var="content"}
    内容
    {/capture}
    

    作用:捕获一部分内容或变量,赋值给content
    调用方式:{$smarty.capture.content}


    (笔记)php-smarty模板引擎_第16张图片
    capture 实例代码

    2config_load
    配置文件


    (笔记)php-smarty模板引擎_第17张图片
    配置文件

    全局变量直接通过
    {config_load file="配置文件路径"}
    调用方式:{#变量名#}

    局部变量调用方式:
    {config_load file="配置文件路径" section="节的名称"}


    (笔记)php-smarty模板引擎_第18张图片
    局部变量调用

    3foreach(采用PHP语法进行遍历)
    (笔记)php-smarty模板引擎_第19张图片
    采用PHP语法进行遍历

    4foreach(采用smarty中的语法进行遍历)
    语法:
    {foreach from=数组 key=键 name=名称 item=内容}
    {foreachelse}
    {/foreach}
    参数说明:
    from:要遍历的数组名称,必选
    item:要遍历的内容或选项,必选
    key:代表数组的索引键值
    name:该foreach的名称
    
    (笔记)php-smarty模板引擎_第20张图片
    采用smarty中的语法进行遍历

  • 二维数组遍历

  • (笔记)php-smarty模板引擎_第21张图片
    二维数组遍历

  • 二维数组遍历有两种方式:

  • (笔记)php-smarty模板引擎_第22张图片
    二维数组遍历的两种方式
    foreach--附加属性
    $smarty.foreach.name.index @index 下标0
    $smarty.foreach.name.iteration @iteration 迭代(当前是第几次循环),默认从1开始
    $smarty.foreach.name.first @first bool当时第一次该值为真
    $smarty.foreach.name.last @last bool当时最后一次该值为真
    $smarty.foreach.name.show @show 数据显示true显示数据,false不显示数据
    $smarty.foreach.name.total @total 循环的总次数
    
    (笔记)php-smarty模板引擎_第23张图片
    foreach附加属性实例

    5、include 函数

    {include file='var' assign='var' [var...]}
    

    文件包含,同时可以通过assign进行变量传递


    (笔记)php-smarty模板引擎_第24张图片
    图解

    (笔记)php-smarty模板引擎_第25张图片
    实例代码

    6、include_php

    {include_php file='var' assign='var' once='true|false'}
    
    (笔记)php-smarty模板引擎_第26张图片
    include_php实例代码

    7、if elseif else

    语法:
    {if}
    {elseif}
    {else}
    {/if}
    
    (笔记)php-smarty模板引擎_第27张图片
    实例代码

    8、literal

    语法:
    {literal}
        .....
    {/literal}
    
    (笔记)php-smarty模板引擎_第28张图片
    literal

    9、section sectionelse

    {section name=名称 loop=循环数组 start=开始(0) step=步阶(1) max=最大循环次数}
    {sectionelse}
    {/section}
    参数:
    name:代表section名称,在循环过程中,会作为索引,必选
    loop:代表循环数组,由其来确定循环的次数,必选
    start:默认从第几个元素开始遍历
    step:每次循环次数,默认是1
    max:最大循环次数
    

    一维数组的遍历:


    (笔记)php-smarty模板引擎_第29张图片
    section

    二维数组的遍历:


    (笔记)php-smarty模板引擎_第30张图片
    二维数组的遍历

    10strip函数
    {strip}
        ....
    {/strip}
    

    功能及应用:去除任何位于{strip}{/strip}标记数据中记录的首尾空格和回车,这样可以保证模板容易理解且不用担心多余的空格导致问题
    11counter

    {counter start=0 skip=2 print=false}
    {counter}
    {counter}
    主要功能:进行计数
    (笔记)php-smarty模板引擎_第31张图片
    counter

    12cycle

    
    实现轮显效果
    参数说明:
    values='参数1,参数2,参数3,...参数n'
    每次循环时,第一条采用参数1,第二条采用参数2,....
    
    (笔记)php-smarty模板引擎_第32张图片
    cycle

    六、系统自定义函数

    1、{debug}
    功能:开启调试窗口


    (笔记)php-smarty模板引擎_第33张图片
    Paste_Image.png

    2、fetch

    {fetch file="file" assign="var"}
    功能:载入文件到当前文件,并赋值给var变量
    输出是采用{$var}
    
    (笔记)php-smarty模板引擎_第34张图片
    fetch实例代码

    3、html_image

    {html_image file="pumplink.png"}
    参数file:文件路径
    功能:显示图片
    
    (笔记)php-smarty模板引擎_第35张图片
    html_image

    4、html_table

    {html_table loop=$data cols=4 table_attr="border=0"}
    参数:
    loop:要遍历的数组名
    cols:每行显示多少列
    table_attr:附加属性
    
    (笔记)php-smarty模板引擎_第36张图片
    html_table

    5、html_checkboxes

    {html_checkboxes name='cust' value=$cust_ids checked=$customer_id output=$cust_names separator="
    "} 参数: name 复选框的名称 values 数组元素,复选框的值 checked 被选中的元素,数组 output 要显示的文字效果,数组 separator 复选框之间的分割符

    6、html_options

    
    参数:
    values 要显示的值,数组
    selected 要选中的下拉选项,数组
    output 输出的文字,数组
    

    7、html_radios

    {html_radios values=$cust_ids checked=$customer_id output=$cust_names separator="
    "}
    (笔记)php-smarty模板引擎_第37张图片
    Paste_Image.png

    七、程序篇

    1、常量
    SMARTY_DIR
    代表包含Smarty.class.php文件的路径,也就是说哪个文件包含Smarty.class.php,那么它就会自动到该目录下寻找相应的文件夹(如plugins)。
    2、常用的变量

  • $template_dir
  • $compile_dir
  • $config_dir
  • $cache_dir
  • $left_delimiter
  • $right_delimiter

  • 常用的变量
    $caching            缓存 bool类型的值,true默认false
    $cache_lifetime     缓存过期时间,默认单位为秒
    $debugging      开启调试
    debugging,应用在php文件中
    功能:只能调试php中的变量信息
    {debug},应用在模板文件中
    功能:无论是php分配的变量或自定义的变量都可以进行调试
    $php_handling       主要应用就是{php}{/php},在Smarty3.0版本之前,如果想使用php标签,那么必须开启php_handing=true;
    

    3、常用方法

    assign 分配变量到模板文件
    assignByRef 分配变量到模板文件(引用)
    
    (笔记)php-smarty模板引擎_第38张图片
    Paste_Image.png
    (笔记)php-smarty模板引擎_第39张图片
    Paste_Image.png
    append 追加数据到数组,过程分为两步
    第一是追加数据到数组中
    第二分配变量到模板文件中(也就不需要assign赋值了)
    appendByRef 追加元素地址到数组中
    clearAllAssign 清除所有赋值变量
    clearAssign 清除指定变量的值
    
    (笔记)php-smarty模板引擎_第40张图片
    Paste_Image.png
    clearCache 清理缓存
    configLoad 载入配置文件
    clearConfig 清除配置文件信息
    display 执行输出并显示指定页面
    fetch 载入文件到字符串
    

    如何在smarty模拟静态页技术?


    (笔记)php-smarty模板引擎_第41张图片
    Paste_Image.png

    templateExists 判断模板是否存在


    (笔记)php-smarty模板引擎_第42张图片
    Paste_Image.png

    七、缓存

    1、smarty中的缓存设置

    $smarty->setCacheDir($cache_dir) 设置缓存目录,不设置默认cache文件中
    $smarty->caching=true 开启缓存机制caching=true,默认为false
    

    (笔记)php-smarty模板引擎_第43张图片
    Paste_Image.png

    编译目录代码
    (笔记)php-smarty模板引擎_第44张图片
    编译目录代码

    缓存目录代码
    (笔记)php-smarty模板引擎_第45张图片
    缓存目录代码

    为什么说缓存要快于编译?
    因为编译文件,只是把标签替换成PHP代码,如数据库访问,而我们缓存文件,是直接把数据都结果或值放入php文件中,所以不需要去读取数据库,那么速度更快一些。
    缓存优势:
  • 速度要更快
  • 减少服务器I/O开销,减小服务器的压力
  • 减小对服务器数据库的压力

  • 缓存文件是从哪里来的?
    由编译文件生成的
    编译文件是从哪里来的?
    访问PHP,通过Smarty调用html模板生成的。
    缓存在什么时候会重新生成?
    1)时间过期
    2)缓存删除
    3)编译文件改变的时候
    4)模板改变
    2、缓存在smarty中的工作流程
    (笔记)php-smarty模板引擎_第46张图片
    工作流程

    3、缓存检测
    我们读取数据库中的文章,如果采用以前的方法,那么每次都要重复的读取数据库。我如何通过缓存机制,来避免这个问题
    解决思路:我们可以不可以把数据库中数据缓存到我们的缓存文件中,那么下次在去访问同一页面时,将直接读取缓存文件。
    (笔记)php-smarty模板引擎_第47张图片

    $smarty->clearCache('tpl.tpl') 清除指定模板缓存文件
    $smarty->clearAll() 清除所有缓存文件
    

    注:这两个功能不开启缓存也可以使用

    (笔记)php-smarty模板引擎_第48张图片
    Paste_Image.png

    4、缓存的存储方式
    我们的smarty缓存是存储在服务器的
    (笔记)php-smarty模板引擎_第49张图片
    缓存存储方式

    5、局部缓存

    (笔记)php-smarty模板引擎_第50张图片
    局部缓存原理
    使用方法:
    $smarty->assign('var','value',true)
    
    (笔记)php-smarty模板引擎_第51张图片
    Paste_Image.png
    (笔记)php-smarty模板引擎_第52张图片
    Paste_Image.png
    (笔记)php-smarty模板引擎_第53张图片
    Paste_Image.png

    6、单页面多缓存
    当我们第一次访问show.php?id=1时,以后每次请求都自动获取到了id=1这条数据库记录

    $smarty->caching=true
    $smarty->display('tpl',$id)
    参数
    最后那个参数,必须是唯一的,能区别所有的连接不同
    
    (笔记)php-smarty模板引擎_第54张图片

    (笔记)php-smarty模板引擎_第55张图片

    7、缓存集合

    (笔记)php-smarty模板引擎_第56张图片

    八、过滤器

    中国政府是一个好政府。如何把该段输出的文字中的“政府”两字换成”**”

    过滤器的种类有三种:
    Prefilters:预过滤器
    Postfilters:后过滤器
    Outputfilters:输出过滤器
    
    (笔记)php-smarty模板引擎_第57张图片
    用法:
    $smarty->registerFilter($type,callback)
    $type:过滤器类型(pre,post,output)
    callback:自定义函数
    
    (笔记)php-smarty模板引擎_第58张图片

    你可能感兴趣的:((笔记)php-smarty模板引擎)