php—Smarty-1 (18)
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)的更多相关文章
- ThinkPHP3.2.3整合smarty模板(二)
前言:继ThinkPHP3.2.3整合smarty模板(一)之后,继续来探讨一下tp框架整合smarty模板,看到有人在群上问到怎么使用自定义的常量,今天就具体来谈谈: 一.开发一个项目,必不可少会用 ...
- Web 在线文件管理器学习笔记与总结(17)复制文件 (18)剪切文件
(17)复制文件 ① 复制文件通过copy($src,$dst) 来实现 ② 检测目标目录是否存在,如果存在则继续检测目标目录中是否存在同名文件,如果不存在则复制成功 file.func.php 中添 ...
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(18)-权限管理系统-表数据
原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(18)-权限管理系统-表数据 这一节,我们插入数据来看看数据流,让各位同学,知道这个权限表交互是怎么一个流 ...
- Windows Phone开发(18):变形金刚第九季——变换
原文:Windows Phone开发(18):变形金刚第九季--变换 变换不是一个好理解的概念,不是吓你,它涉及很多有关代数,几何,以及线性代数的知识.怎么?被我的话吓怕了?不用怕,尽管我们未必能够理 ...
- 优化数据页面(18)——标注keyword
优化数据页面(18)--标注keyword 设计要点:优化数据页面.界面设计.美化exce 秀秀:事实上俺认为,相同是数据项,它们的重要程度也不同. 阿金:嗯? 秀秀:每一行数据时描写叙述一条信息的, ...
- [.net 面向对象程序设计深入](18)实战设计模式——设计模式使用场景及原则
[.net 面向对象程序设计深入](18)实战设计模式——设计模式使用场景及原则 1,什么是设计模式? 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计 ...
- Java设计模式(18)策略模式(Strategy模式)
Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如,公司经营业务变化图,可能有两种实现方式,一个是线条曲线, ...
- 「转」python数字图像处理(18):高级形态学处理
python数字图像处理(18):高级形态学处理 形态学处理,除了最基本的膨胀.腐蚀.开/闭运算.黑/白帽处理外,还有一些更高级的运用,如凸包,连通区域标记,删除小块区域等. 1.凸包 凸包是指一 ...
- leecode刷题(18)-- 报数
leecode刷题(18)-- 报数 报数 描述: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 1112 ...
- Qt 学习之路 2(18):事件
Home / Qt 学习之路 2 / Qt 学习之路 2(18):事件 Qt 学习之路 2(18):事件 豆子 2012年9月27日 Qt 学习之路 2 60条评论 事件(event)是由系统 ...
随机推荐
- Docker私有仓库registry的搭建及使用
前言 由于Docker Hub公共仓库很多时候使用这并不是很方便,大分部因为网络的问题可能拉取的时候会很慢或者拉取不到,所以搭建一个本地的私有仓库. 准备 由于此篇文章是在Kubernetes集群安装 ...
- 【hdu4347】The Closest M Points 【KD树模板】
题意 一个k维空间,给出n个点的坐标,给出t个询问,每个询问给出一个点的坐标和一个m.对于每个询问找出跟这个点最接近的m个点 分析 kd树的模板题. #include <cstdio> # ...
- mybatis调用存储过程获得取返回值
总体思路:map传值 controller: Map<String,Object> m=new HashMap<String,Object>(); m.put("na ...
- jsp页面拨打电话和QQ聊天
拨打电话: <a href="tel:手机号">拨打电话</a> 这种方式塞班.安卓与iphone都支持. 参考文章:https://blog.csdn.n ...
- 6-Collision-hdu5114(小球碰撞)
Collision Time Limit: 15000/15000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others)Tot ...
- Halcon中的坐标系特点及XLD的镜像转换
我们知道,Halcon中的坐标系的原点在左上角,而一般二维平面坐标系的原点在左下角.那么Halcon中坐标系和一般的二维坐标系有什么区别呢?我通过下面这个例子来分析. gen_image_const ...
- C语言日志处理
一.简介 zlog是一个高可靠性.高性能.线程安全.灵活.概念清晰的纯C日志函数库,在效率.功能.安全性上大大超过了log4c,并且是用c写成的,具有比较好的通用性. 二.安装 下载 https:// ...
- sql查询磁盘空间并发预警邮件
检测磁盘空间,如果低于设置的预警值则发出一封预警邮件,这样的事情可以用SQL server的作业可以做,关键SQL语句如下例子所示: DECLARE @TableText NVARCHAR(MAX)= ...
- android studio使用真机测试时点击Debug调试模式时报Error running app:No target device found,点击运行模式却是启动正常的
原因是adb没检测到设备(包括真机和虚拟机). 在Terminal执行adb devices命令,查看有没有连接到的设备. 如果没有设备,确认虚拟机是否正确打开,真机是否连接打开USB调试并安装驱动. ...
- java中double和float精度丢失问题
为什么会出现这个问题呢,就这是java和其它计算机语言都会出现的问题,下面我们分析一下为什么会出现这个问题:float和double类型主要是为了科学计算和工程计算而设计的.他们执行二进制浮点运算,这 ...