zoukankan      html  css  js  c++  java
  • Smarty模板引擎技术(一)

    一、Smarty模板引擎简介

    什么是smarty?
      Smarty是采用php写的一个模版引擎,设计的目的是要将php代码与html代码分离,使php程序员只专注于php代码的编写,网页美工只专注于网页的美化
    没有模版引擎时出现的问题?
      html中php代码比重越来越大
      页面的数量越来越多
      程序设计与美工设计分工不明确
    传统的php文件:
      1. php代码跟html混编在一起,不利于程序员和美工的分工,程序员和美工不能同时修改一个文件
      2.数据的传递同一页面传递,php数据在页面中的显示需要使用php标记
      比如:<?php echo $username?>
      index.php


    采用模版引擎后:
      1. php代码与html代码分离开了,php代码放在一个单独的php文件中,html代码放在一个单独的html文件中
      2. 数据的传递首现php中的数据先给了模版引擎,然后模版引擎再把接收到的数据给模版文件显示。
      3. 模版文件中不再有php代码或者说php标记的出现,模版中显示的数据都是通过模版引擎的标记显示出来的
      index.php   smarty模版引擎   index.html

    目前php的模版引擎很多,为什么要使用smarty模版引擎?
      1. 一般的模版引擎,如,phplib 都是在建立模版对象时取得要解析的模版,然后把变量套入后,再通过parse()这个方法来解析模版,最后再将网页输出,总结成一句话,那句是每次执行的时候都要重新解析一遍
      2. 对于smarty模版引擎来说,不必在程序里再做parse()这样的操作了,smarty会自动帮我们做,而且已经编译过的网页,如果在没有改动的情况下,smarty会跳过重新编译的动作而直接去执行编译过的网页,以节省编译时间。

    Smarty的其它优点:
      1. 速度快:相对于其它的模版引擎而言的
      2. 编译型:采用smarty编写的程序在运行时会编译成一个非模版技术的php文件。这个文件采用了php与html混合的方式,在下一次访问模版时将web请求直接转换到这个文件中,而无需重新编译(在模版文件没有改动的情况下)
      3. 缓存技术:它可以将用户最终看到的html网页缓存成一个静态的html网页。当用户开启缓存时,可以设置缓存时间,在缓存文件没到期之前,将用户的请求直接转换到这个静态的缓存文件,相当于调用了一个静态的html文件。
      4. 模版中可以使用流程控制语句。

    不适合使用smarty的地方
      1. 需要实时更新的内容,例如:股票显示,它需要经常对数据进行更新
      2. 小项目。

    Smarty模版引擎运作流程。
      ①在php程序运行时,初始化smarty模版引擎
      ②smarty模版引擎读取模版文件(.html或tpl文件)
      ③在读取模版文件的时候,smarty模版引擎会自动判断该模版文件是否需要重新编译。
      ④如果不需要重新编译,则直接进行模版变量替换。
      ⑤如果是第一次执行此程序文件或者说模版被改动了,那么就需要重新编译后再进行模版变量替换。
      ⑥最终执行的是编译后的php文件。
      ⑦输出结果到浏览器。

    二、Smarty模板引擎小实例

    到官方网站去下载smarty模版引擎压缩包
      官网:http://www.smarty.net

    解压此压缩包,发现其下有一个libs文件夹,将libs文件夹重命名为smarty,并移动到网站根目录下的libs文件夹

    打开smarty引擎libs文件夹,里面有如下文件:
      sysplugins      系统插件目录
      plugins        外部插件
      debug.tpl      输出debug调试信息输出的模板
      Smarty.class.php  smarty模版引擎核心类文件,要使用smarty模版引擎,首先要引入该文件
      SmartyBC.class.php

    搭建Smarty模板示例:
      1. 将libs库目录复制过来。
      2. 创建一个模板目录templates模板文件存放目录
        创建一个configs配置文件目录
      3. 编写index.php文件(入口文件)做Smarty导入和创建
      //1.导入Smarty类
        require("libs/Smarty.class.php");

      //2.创建对象
        $smarty = new Smarty();

      //3.初始化信息
        $smarty->left_delimiter="{"; //重新定义Smarty模板的左定界符
        $smarty->right_delimiter="}"; //重新定义Smarty模板的右定界符
      //静态缓存
        $smarty->caching=true; //是否开启静态缓存 true(开启)
        $smarty->cache_lifetime=5; //设置缓存时间 (5表示缓存5秒钟)

      //4.放置变量:
        $smarty->assign("name","zhangsan");//向Smarty模板中放置变量name值为张三
        $smarty->assign("date",date("Y-m-d H:i:s"));//为模板放一个时间

      //5.加载模板:
        $smarty->display("index.html");

      4.使用浏览器访问index.php,将会创建目录templates_c和cache目录

      5. 最后的结构:
        根目录
        |--libs              //Smarty库
        |    |--Smarty.class.php
        |--templates          //模板目录
        |    |--index.html
        |--templates_c       //模板编译目录
        |--cache            //模板静态缓存目录(注意需开启缓存)
        |--configs          //配置文件目录
        |--index.php        //php文件(入口)

    简单的分析一下Smarty.class.php核心类文件
      它是一个类文件:类是由属性(变量)和方法构成
      类的名称:Smarty
      主要属性或变量:
        $template_dir: 模版目录,主要用来存放模版文件,如:.html文件、.tpl文件
        $compile_dir: 编译目录,主要用来存放编译后的php文件,即混编方式的文件
        $config_dir: 配置目录,主要用来存放公共的配置文件
        $cache_dir: 缓存目录,主要用来存放缓存文件
        $left_delimiter: 左边界符
        $right_delimiter: 右边界符
        $caching 是否开启缓存
        $cache_lifetime 定制缓存时间

      主要方法:
        assign():主要用来将php中的标量类型的数据赋值给模版变量。
        display():主要用来显示指定的模版文件

      在使用smarty之前,首现需要对核心类文件(Smarty.class.php)进行配置

        //1.首现要引入核心类文件
          include_once “libs/smarty/Smarty.class.php”;
        //2.使用new关键字创建一个核心类实例对象
          $smarty=new Smarty();

        //3.配置

          $smarty->template_dir=”./templates”;      //设置模版目录

          $smarty->compile_dir=”./templates_c”;      //设置编译目录

          $smarty->config_dir=”./configs”;        //设置公共配置文件目录
      
          $smarty->caching=false;            //设置缓存,在项目调试期间一般不开启缓存

          $smarty->cache_dir=”./cache”;        //设置缓存目录
             /* 1.设置左右边界符,默认的左右边界符是一对大括号,实际应用中一般不使用默认的边界符,因为容易与javascript中函数的定义相冲突

              2.以后模版中模版变量都要放在此左右边界符中
            */
          $smarty->left_delimiter=”{”;
          $smarty->right_delimiter=”}”;

        //配置完成之后进行如下操作
        //4.将php中标量类型的值赋值给模版变量
          $smarty->assign(“username”,$username);
        //5.显示对应的模版文件,会根据$smarty->template_dir=”./templates”去当前目录下的templates文件夹下去寻找index.html文件
          $smarty->display(“index.html”);
      如上配置,我们需要确保当前文件夹下有如下目录,如果没有的话就手工建立
        templates           //存放模版文件
        templates_c        //存放编译目录
        configs          //存放公共配置文件
        cache          //存放缓存文件

      1. 此时整个项目的文件部署:
        根目录
          |--libs
          |   |--Smarty.class.php
          |--templates
          |    |--a.html
          |--templates_c
          |--cache
          |--configs
          |--init.inc.php
          |--a.php
          |

      2. 相对路径:在程序文件中引入外部文件或设置目录时都是以本文件为基础的
        比如:要在index.php文件中引入Smarty.class.php文件,因为Smarty.class.php文件位于libs/smarty文件夹下,而index.php文件又跟libs文件夹同级,所以应该这样引入:
          include_once “libs/smarty/Smarty.class.php”;

  • 相关阅读:
    用于爬取知乎某个话题下的精华问题中所有回答的爬虫
    BSP -- 图书共享系统(Book Sharing Platform)
    【已解决】WPS2018 从第三页开始插入页眉页码(即前两页不要页眉页码)
    【编译原理】大白话讲解 First 集和 Follow 集的构造算法
    如果
    HTTP协议(1)------->资源和URL
    JavaWeb框架_Struts2_(八)----->Struts2的国际化
    深入理解java虚拟机----->垃圾收集器与内存分配策略(下)
    深入理解java虚拟机----->垃圾收集器与内存分配策略(上)
    JavaWeb框架_Struts2_(七)----->文件的上传和下载
  • 原文地址:https://www.cnblogs.com/yexiang520/p/5750994.html
Copyright © 2011-2022 走看看