Smarty模板引擎技术(一)_weixin_30797199的博客-程序员秘密

技术标签: ViewUI  php  javascript  

 

一、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”;

 

转载于:https://www.cnblogs.com/yexiang520/p/5750994.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30797199/article/details/96694999

智能推荐

webservice 常见错误及解决方法_get_business_system_error_shine4j的博客-程序员秘密

1、调用别人的webservice 方法 Service service =new Service();Call call = (Call) service.createCall();call.setTargetEndpointAddress(new java.net.URL(endpoint));call.setOperationName(new QName("htt

黑马程序员_MSSQLServer知识总结_Jelly_Sucre的博客-程序员秘密

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------DBMS 数据库管理系统DataBase Managment System、数据定义语言(dll)数据库创建代码:(SQLServer大小写不敏感)CREATE DATABASE 数据库名称O

vue 动态控制input的disabled属性的方法_v-bind:disabled_一个假的前端男的博客-程序员秘密

html代码 &lt;el-input v-model="ruleForm.price" type="number" v-bind:disabled='ruleForm.name===""'&gt;&lt;/el-input&gt;主要是通过 v-bind:disabled 绑定 ruleForm.price 的值来动态判断是否添加 disabled 属性,而 ruleForm.price 的默认初始值为0,新增时不会添加此属性;当点击修改时,ruleForm.price的值就是当前所要修改的数据记

Struts2学习笔记三_dangdanglili的博客-程序员秘密

今天弄了半天终于明白如何在Action中访问Servlet API了,唉......感觉没有Struts1方便,不过为了解偶也是值得的,呵呵 5.访问Servlet API       前面曾经说过,用户所写的Action并不是真正处理用户请求的Action实例,而仅仅是Struts2的Action代理的代理目标,这是因为它没有和Servlet API直接关联,根本无法处理用户的请求,

ATF官方文档翻译(十六):ATF固件设计(Firmware Design)-Armv8-A体系结构扩展&&ATF的代码结构_Hkcoco的博客-程序员秘密

TF-A在适用的情况下使用Armv8-A架构扩展。本节列出了体系结构扩展的用法,以及控制它们的构建标志。通常,除非单独提及,否则构建选项ARM_ARCH_MAJOR和ARM_ARCH_MINOR将在构建TF-A时选择要作为目标的体系结构扩展。后续的Arm架构扩展与以前的版本向后兼容。生成系统只要求ARM_ARCH_MAJOR和ARM_ARCH_MINOR具有有效的数值。这些构建选项仅控制构建中是否包含特定于体系结构扩展的代码。否则,TF-A的目标是基础Armv8.0-A架构;

c语言基础_c语言cw顺序_cw双叶星的博客-程序员秘密

基本类型的常识 int 类型的参数一般是两个字节或者四个字节,大部分是两个字节。int的范围是-2的十五次方到二的十五次方减一。float浮点型是四个字节double双精度是八个字节 char是一个字节 关于取余运算符% 取余运算符%的左右两端必须都为整数,但是可以有负的整数我们设a%b的结果为c,如果a或b中有一个为正整数,那么c的正负情况如何...

随便推点

Android6.0 按键流程 InputDispatcher分发输入消息(三)_android startdispatchcyclelocked__dowork的博客-程序员秘密

一、InputDispatcher的notifyKey函数接上一篇我们我们分析到InputDispatcher的notifyKey函数:[cpp] view plain copy void InputDispatcher::notifyKey(const NotifyKeyArgs* args) {      if (!validateKeyEvent(args

语音识别技术发展迅速,这本书是你需要的全方位解读语音识别的最新著作!_博文视点的博客-程序员秘密

随着物联网技术和智能设备技术的快速发展,人与机器的交互,不再仅依赖于鼠标和键盘,更有可能的是直接采用语音。 这其中的关键技术就是自动语音识别(Automatic Speech Recognition,ASR)。其所要完成的工作,简单地说,就是在与机器进行语音交流时,能够让机器听懂你在说什么。自20世纪50年代以来,对语音识别的研究已有近70年的历史,取得了多方面的突破,如今已在产业界有较多的应用,如语音输入法、语音搜索、智能音箱等软硬件产品。这些产业应用带动了更多的企业和科研机构参与进来,因此需要了

Windows下Mysql设置大小写敏感_my.ini设置小写_hongmin.shm的博客-程序员秘密

windows下本地mysql导入sql时原本大写的表名变成小写的表名的解决办法,设置mysql不忽略表名及字段大小写的方法

Jetpack Compose——TopAppBar(顶部应用程序栏)、BottomAppBar(底部应用程序栏)_compose topappbar_lplj717的博客-程序员秘密

该博客基于:compose_version = '1.1.0-beta01'TopAppBar:位于屏幕的顶部。一般包含标题,导航图标和其他的更多操作等BottomAppBar:位于屏幕的底部,一般显示导航和按键操作TopAppBar首先看看TopAppBar的参数:有两种参数类型TopAppBar( modifier: Modifier = Modifier,//布局修饰 backgroundColor: Color = MaterialTheme.colors.prim

Java面试题全集(上)_金州小飞侠的博客-程序员秘密

2013年年底的时候,我看到了网上流传的一个叫做《Java面试题大全》的东西,认真的阅读了以后发现里面的很多题目是重复且没有价值的题目,还有不少的参考答案也是错误的,于是我花了半个月时间对这个所谓的《Java面试大全》进行了全面的修订并重新发布在我的程序员秘密。在修订的过程中,参照了当时JDK最新版本(Java 7)给出了题目的答案和相关代码,去掉了EJB 2.x、JSF等无用内容或过时内容

处理机调度的问题_gaoxiaobai666666的博客-程序员秘密

一、CPU资源的时分复用进程切换:CPU当前的占用者切换保存当前进程在PCB中的执行上下文(CPU状态) 恢复下一个进程的执行上下文处理及调度从就绪队列中挑选下一个占用CPU运行的进程 从多个CPU中挑选就绪进程可使用的CPU资源调度程序:在处理机中负责挑选进程的内核函数调度策略:依据什么原则挑选进程/线程 调度时机:什么时候进行调度二、调度时机内核与逆行调度程序的...

推荐文章

热门文章

相关标签