smarty

一、模板原理

1、  为什么使用模板

1)  场景:

for($i=;$i<$count;$i++){

       echo ‘<td>’.$row[‘proname’].’</td>

}

以上这种写法将html与php进行混编,不利于开发和维护

2)  场景:

我们现在开发了一个网站,经过一段时间的运营,客户对前台不满意,我们又开发一套界面,但运行之后,客户认为之前的样式比较好,经常更换网站样式

解决以上两个问题的最好办法,就是使用模板

2、  模板的具体实现

模板的实现其实就是字符串替换

1)  例1

模板文件:

PHP文件:

1)  例2:

Template类:

PHP代码:

上面的类文件中的代码,不够优化,我们可以使用比较流行的模板框架来实现自己的项目

二、Smarty简介

1、  什么是Smarty

Smarty是一个基于PHP开发的PHP模板引擎。它提供了逻辑与外在内容的分离。

2、  Smarty的特点

l  速度

l  编译型

l  缓存技术

l  插件技术

l  语句自由 if/elseif/else/endif

l  实时更新 :实时性要求比较高

3、  配置

l  http://smarty.php.net

l  /lib

l  Smarty 2.6       php4.0

l  Smarty 3.0       php5.0

1 解压smarty,进入解压目录

Demo:案例

Libs:Smarty源代码

1)  进入libs目录,

Plugins:自定义插件目录

Sysplugins:系统插件目录

Debug.tpl :在Smarty中,有调试功能,可以观察变量的值 ,调试窗口模板

Smarty.class.php:Smarty核心类文件(入口文件)

SmartyBC.class.php :Smarty3.0在2.0的基础上进行了升级,如果想使用2.0的功能,可以引用这个入口文件

3)将libs目录复制到项目中,并重命名

三、 快速入门

1、  代码实现:

模板代码:

{$name}、{$age} :模板标记变量

程序代码:

2、  smarty工作原理:

l  smarty将php源文件,首先编译成中间文件

l  如果启用缓存,再根据编译文件生成缓存文件

l  之后的每次访问都会访问编译文件

l  如果启用缓存且有缓存文件而且没有过期,则直接访问缓存文件

Smarty第一次运行某个程序时,会将这个程序生成一个编译文件

以后,每次运行这个程序时,只要模板没有改变,就直接运行这个编译文件,如果模板改变了,就重新生成编译文件,再去运行。

编译是指针对模板的编译

3、  原理图:

4、  分界符

l  left_delimiter

l  right_delimiter

Smarty默认分界符是:”{“,”}”

如果需要改变,可以设置上面两个属性

模板代码:

程序代码:

5、  模板变量赋值

Assign方法两个参数

1)  模板变量名

2)  值

四、 路径设置

1、  Smarty中的几个常用路径

1)  模板路径           template_dir

2)  编译路径           compile_dir

3)  配置文件路径       config_dir

4)  缓存文件路径       cache_dir

以上四个路径是smarty类下的四个属性

2、  在Smarty2.6中,这几个属性可以在类外设置的

Class Smarty{

Var $template_dir;

Var $compile_dir;

Var $config_dir;

Var $cache_dir;

}

3、  在Smarty3.0中,这个属性是这样定义的:

protected $template_dir

protected $compile_dir

这里定义成了受保护成员,也就是说,我们可以继承smarty类,然后可以拥有这几个受保护成员。

在这里,我们发现,可以直接设置这几个受保护成员。

当为一个不存在或不可访问的成员赋值时,自动执行set

当对一个不存在或不可访问的成员取值时,自动执行get

当取值或赋值时,首先检查,方法中$allowed数组是否定义该元素,如果定义过,则直接调用该数组元素对应的smarty方法

通过以上代码,可以得知,在smarty3.0中,有八个方法专门针对于这四个属性取值和赋值

l  setTemplateDir()

l  setCompileDir()

l  setConfigDir()

l  setCacheDir()

l  getTemplateDir()

l  getCompileDir()

l  getConfigDir()

l  getCacheDir()

建议大家使用以上方法进行路径设置

在Smarty的构造方法中,为以上四个属性设置了默认值。

通过以上程序输出smarty默认路径

php—Smarty-1 (18)的更多相关文章

  1. ThinkPHP3.2.3整合smarty模板(二)

    前言:继ThinkPHP3.2.3整合smarty模板(一)之后,继续来探讨一下tp框架整合smarty模板,看到有人在群上问到怎么使用自定义的常量,今天就具体来谈谈: 一.开发一个项目,必不可少会用 ...

  2. Web 在线文件管理器学习笔记与总结(17)复制文件 (18)剪切文件

    (17)复制文件 ① 复制文件通过copy($src,$dst) 来实现 ② 检测目标目录是否存在,如果存在则继续检测目标目录中是否存在同名文件,如果不存在则复制成功 file.func.php 中添 ...

  3. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(18)-权限管理系统-表数据

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(18)-权限管理系统-表数据 这一节,我们插入数据来看看数据流,让各位同学,知道这个权限表交互是怎么一个流 ...

  4. Windows Phone开发(18):变形金刚第九季——变换

    原文:Windows Phone开发(18):变形金刚第九季--变换 变换不是一个好理解的概念,不是吓你,它涉及很多有关代数,几何,以及线性代数的知识.怎么?被我的话吓怕了?不用怕,尽管我们未必能够理 ...

  5. 优化数据页面(18)——标注keyword

    优化数据页面(18)--标注keyword 设计要点:优化数据页面.界面设计.美化exce 秀秀:事实上俺认为,相同是数据项,它们的重要程度也不同. 阿金:嗯? 秀秀:每一行数据时描写叙述一条信息的, ...

  6. [.net 面向对象程序设计深入](18)实战设计模式——设计模式使用场景及原则

    [.net 面向对象程序设计深入](18)实战设计模式——设计模式使用场景及原则 1,什么是设计模式? 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计 ...

  7. Java设计模式(18)策略模式(Strategy模式)

    Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如,公司经营业务变化图,可能有两种实现方式,一个是线条曲线, ...

  8. 「转」python数字图像处理(18):高级形态学处理

    python数字图像处理(18):高级形态学处理   形态学处理,除了最基本的膨胀.腐蚀.开/闭运算.黑/白帽处理外,还有一些更高级的运用,如凸包,连通区域标记,删除小块区域等. 1.凸包 凸包是指一 ...

  9. leecode刷题(18)-- 报数

    leecode刷题(18)-- 报数 报数 描述: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 1112 ...

  10. Qt 学习之路 2(18):事件

    Home / Qt 学习之路 2 / Qt 学习之路 2(18):事件 Qt 学习之路 2(18):事件  豆子  2012年9月27日  Qt 学习之路 2  60条评论 事件(event)是由系统 ...

随机推荐

  1. js解决弹窗问题实现班级跳转DIV示例

    js解决弹窗问题实现班级跳转DIV 1.js代码如下: <%--实现班级跳转DIV--%>  <div id="displayClassDiv" style=&q ...

  2. 迷你MVVM框架 avalonjs 0.92发布

    本版本最大的改进是引入ms-class的新风格支持,以前的不支持大写类名及多个类名同时操作,新风格支持了.还有对2维监控数组的支持.并着手修复UI框架. 重构 class, hover, active ...

  3. android run/debug configurations时报错Cannot reload AVD list:

    问题:配置Android的run/debug configurations时报错Cannot reload AVD list: cvc-enumeration-valid: Value '280dpi ...

  4. cookie的长度和限制数量

    一.浏览器允许每个域名所包含的 cookie 数 Microsoft 指出 Internet Explorer 8 增加 cookie 限制为每个域名 50 个,但 IE7 似乎也允许每个域名 50 ...

  5. Mybatis多表查询(一对一、一对多、多对多)

    Mybatis的多表级联查询 . 一对一可以通过<association>实现,一对多和多对多通过<collection>实现. <discriminator> 元 ...

  6. shell脚本学习指南-学习(2)

    1.I/O重定向符:<   >  >与管道   | #! /bin/bash echo -n "Enter your name!" //输出 printf &qu ...

  7. 搭建简单的Spring框架

    1.Spring框架相关jar包下载地址http://repo.springsource.org/libs-release-local/org/springframework/spring,复制,进入 ...

  8. 「这样玩Hexo」修改主题自定义实现界面和功能的自定义

    首发于个人博客 想获得更好的阅读体验,烦请移步⬆️ 前言 作为一个颜党,在换了许多Hexo的主题后,选择了现在使用的fexo主题.但是相比于大多数博主使用的NEXT,fexo还是不够powerful, ...

  9. DBA的工作职责和每日工作

    DBA一般职责 1.安装和升级数据库服务器,以及应用程序工具构建和配置网络环境. 2.熟悉数据库系统的存储结构预测未来的存储需求,制订数据库的存储方案. 3.根据开发人员设计的应用系统需求创建数据库存 ...

  10. dedecms分页

    mshd_orderlist.php $page = isset($_REQUEST[; $count = $mshd_miaosha_member_obj -> getMemberList(t ...