合并_08smarty模板技术(3days)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并_08smarty模板技术(3days)相关的知识,希望对你有一定的参考价值。
2013-12-9 昨天内容回顾
- 两个常用方法assign()和display()
- assign方法给模板传递变量信息(实际是把信息给到smarty对象属性里边)
- append方法给模板传递变量信息,和assign的区别是以数组形式传递给模板,可以使用名字一样的变量信息
- display()方法展示模板, 后缀.html。
- 一般实际在使用的时候,模板的后缀习惯是 .tpl,这样别人就不会直接过来访问。
- 模板中3种变量使用
- assign给模板传递的变量使用
- 系统保留变量 get post session cookie now config {$smarty.get.名字}
- 配置变量信息 config/site.conf {config_load file="site.conf" section="段"}
- {#名字#} {$smarty.config.名字}
- 配置变量信息可以使得页面整体css样式发生快速变化
- [newyear]
- color=XX
- backcolor=XX
- [yuandan]
- color=XX
- backcolor=XX
- 模板中使用数组元素和对象属性
- 数组[下标]
- 数组.下标
- 以上两种方式支持索引和关联数组的使用
- 对象->属性 (对象方法也支持使用)
- foreach遍历数组(索引和关联数组都可以遍历)
- {foreach 数组 as $k => $v}
- {foreachelse}
- 数组为空
- {/foreach}
- @first 判断是否是第一条信息 {[email protected]}
- @last
- @iteration
- @index
- @total
- @show 数组是否为空
- section(索引数组)
- 复选框和下拉列表使用
- {html_checkboxes option=$数组 selected=$数组 separator=" "}
- {html_checkboxes value=$数组 output=$数selected=$数组 separator=" "}
- {html_options option=$数组 selected=$数组}
?
【继承、布局】
?
- 布局页面
- 子级页面
?
【模板文件包含】
?
【模板内容捕捉】
一个广告内容在一个页面的多个地方同时显示
<div>具体广告内容</div>
【变量调节器】
变量调剂器在linux系统里边称作"管道"
?
调节变量
????$name = "liNkEn";
????{$name} // liNkEn
????{$name|lower} 把变量调节为小写的 //linken
????{$name|upper} 把变量调节为大小的 //LINKEN
????{$name|count_charactor} 计算变量字符长度 //6
?
????变量经过"函数"调节后在输出,变量与函数中间使用 | 竖线连接
????变量没有在页面上正常输出,而是成为了后者调节函数的输入参数
????变量调节器:前者的输出是后者的输入
?
????
?
不同操作系统换行符号显示
?
【smarty与mvc项目结合使用】
?
?
总结:
- 布局、继承 extends block
- <{ }> < {extends}>
- 模板包含 {include file="public/XX"}
- 变量调节器 truncate date_format lower upper
- smarty与mvc框架结合
?
练习:把smarty融入进自己的项目
?
【缓存】
两种类型缓存:
????①:缓存静态的html代码
????②:把数据库获得到的数据给缓存起来
?
????我们在页面上看到的信息是通过php程序生成出来,最终以html代码形式展现出来的。
????网站的信息,在相当一段时间不会随便发生变化,那么我们就把php生成好的html代码给缓存起来,下次用户再访问网站,就不用再次请求php解析,直接访问静态的html代码。
?
????缓存介质:文件、内存(使用最多)、数据库
????借助smarty实现静态html代码缓存
????在实际工作环境中使用最多的缓存是memcache内存缓存。缓存的是数据库的数据信息,并不是静态html代码。
????
????什么地方适合使用静态html代码缓存:
????门户新闻网站。
?
- 通过smarty实现html静态化缓存
- 缓存时间
‘cache_lifetime‘ => 3600,
$smarty -> cache_lifetime = 20;
$smarty -> isCached(‘模板文件‘); 判断缓存是否存在
?
?
- $smarty -> caching=1、2;的区别
?
?
????
02.php
????$smarty = new Smarty();
????$smarty -> caching = 2;
????$smarty -> cache_lifetime = 20;
????$smarty -> display(‘02.html‘);
????不断有用户访问02.php,该情况caching=1/2效果一致。
?
02.php 生成静态页面(后台)
????$smarty = new Smarty();
????$smarty -> caching = 2;
????$smarty -> cache_lifetime = 20;
????$smarty -> display(‘02.html‘);
?
03.php 04.php 05.php访问静态文件(前台)
????$smarty = new Smarty();
????$smarty -> caching=2; //开启缓存,否则不可以使用缓存文件
????$smarty -> display(XXX); //首先判断缓存文件是否有效,否则重新生成缓存
?
????有好多缓存文件,缓存时间不一样,有的缓存1天,有的缓存3天,有的缓存7天
(这样把cache_lifetime Smarty.class.php的有效时间也设置最少7天以上)。
?
caching=2的作用是可以为不同文件设置不同的缓存时间。
?
【分页页面缓存效果】
1. 单模板多缓存
????
- 删除缓存
【局部不缓存】
局部不缓存应用场景:首页面,有用户登录信息,显示用户名的部分就不能被缓存。
具体应用:
????
????
【缓存集合】
与单模板多缓存类似
display(‘04.html‘,编号); 给每个静态页面生成一个编号
?
????1. 生成缓存集合
????
2. 清除缓存集合
?
总结:
????缓存
????设置缓存 caching=1/2;
????判断缓存是否存在 isCached()
????缓存文件删除 clearCache(‘模板名称‘)
???????????????? clearAllCache();
????单模板多缓存制作 display(‘模板‘,每个静态页面的标志cache_id);
????局部不缓存
????????{nocache}{/nocache}
????????{$name nocache}????
????????assgin(‘name‘,‘tom‘,true);
????????insert_age()函数应用
????缓存集合
作业:
- 自定义小型mvc框架,实现集成smarty
- 所有Controller控制器有父类,在父类里边实例化smarty使用
- 通过"家教模板"实现继承和布局效果
- 练习缓存使用
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
???? ?
???? ?
?
?
2013-12-10 昨天内容回顾
- 布局继承效果
- extends block
- 有父级页面 和 子级页面
- 布局laoout父级页面
- parent.html
- <html>
- <head></head>
- <body>
- <div>头部信息</div>
- {block name="left"}{/block}
- {block name="right"}{/block}
- <div>脚部信息</div>
- </body>
- <html>
- 子级页面来继承
- 子级页面
- son.html
- <html>
- <head>
- <style>XXXX</style>{*不起作用*}
- </head>
- {extends name="parent.html"}
- {block name="left"}XXXXXX{/block}
- </html>
- 子级页面的css样式不起作用,原因是子级页面只能有两样东西:extends 和 block
- 可以把css样式放入{block}标记里边就可以起作用
- 模板包含include
- {include file="公共部分" assign="XX"}
- {$XX}
- 模板捕捉capture
- 可以使用capture标签捕捉一段静态代码内容,在页面其他地方使用这个内容非常方便
- {capture name="XX" assign="YY" append="ZZ"}<div>静态内容</div>{/capture}
- 具体使用:
- {$smarty.capture.XX}
- {$YY}
- {$ZZ[0]}
- 变量调节器
- 前者的输出等于后者的输入
- {$name|lower}
- {$name|upper}
- {$content|truncate:20} 截取内容只显示17个字符,后边有3个点
- {$mytime|date_format:"%Y"} 时间格式化显示
- linux操作系统也有变量调节器,称为"管道"
- 与mvc结合使用
- 在配置文件引入smarty
- smarty实例化是在许多控制器的父类里边实例化的(好处是所有控制器都可以直接使用smarty,不必重新实例化)
- 缓存设置使用
- 开启缓存 $smarty -> caching=1/2;
- 缓存有效期问题,可以通过两方便判断缓存是否过期
- 1. smarty->cache_lifetime熟悉判断
- 2. 根据每个缓存文件自己的缓存时间进行判断
e) 单模板多缓存????数据分页要为每个分页都制作缓存
????display("模板",编号page_id);
- 删除缓存
- clearCache(模板)
- clearCache(模板,编号)
- clearAllCache()删除全部缓存
- 局部不缓存设置
- {nocache}{/nocache}
- {$name nocache}
- $smarty -> assign(name,value,true);
- function insert_age(){不被缓存内容} {insert name="age" assign="XX"}
- 缓存集合
- display(模板,"hello|world|beijing");
- display(模板,"hello|world|shanghai");
- clearCache(null,‘hello/world‘);
- clearCache(‘模板‘,‘hello|world|shanghai‘); 只删除hello/world/shanghai下的指定模板
?
【缓存原理】
- 缓存的静态文件是如何生成
答:是把"php缓冲区"内容获得到,生成静态文件。
????
//ob_start(); 开启php缓冲区
//ob_flush(); 输出php缓冲区内容
//ob_get_contents(); 获得php缓冲区内容
//ob_clean() 清空php缓冲区内容
//ob_get_clean(); 获得php缓冲区内容,并且清空缓冲区
//flush()输出浏览器缓冲区内容
?
- 开启php缓冲区:
- php缓冲区和浏览器缓冲区内容直接输出,不要停留
- 获得php缓冲区内容并直接存入文件
- 缓冲区相关函数
- 火狐浏览器对缓存处理
7. ????????php程序被访问执行流程与缓存关系????
????????
?
【smarty执行流程】
编译文件: html+php混合代码文件
缓存文件:html静态代码
?
执行顺序关系:
????如果开启缓存,首先执行缓存文件
????没有开启缓存,执行编译文件即可
- 前置过滤器使用
- 后置过滤器
- 输出过滤器
- 过滤器为我们带来的显著好处
可以通过过滤器集中处理我们的"编译文件"和"缓存文件"
尤其在MVC框架里边使用,只要在父类控制器集中设置好过滤器,所有的编译文件和缓存文件都会起作用
- 强制重新生成编译文件(先删除)
?
?
高级特性
- 数据对象
- 数据出现背景
b) 具体使用数据对象
- 对象注册
我们可以给模板传递一个对象
在模板中对象的"属性"和"方法"都可以使用
?
对象注册研究的是对象的方法。
1. 对象注册功用:
对象注册 可以限制模板中对象访问的自己的具体方法。
2. 注册对象只对方法其作用,不关系属性
- 注册对象具体使用
总结:
- 缓存原理(页面静态化过程) 抓取php缓冲区内容生成静态文件。
- ob_flush() flush()
- 过滤器使用
- 数据对象,同一个请求的许多模板里边可以使用相同名字的变量,而没有冲突
- 注册对象:可以限制模板中对象访问的具体方法,只关心方法,不关心属性
?
【smarty与已有项目结合】
????smarty与已有项目结合:
????
????
????调试自动加载函数
?
- 使用自动加载函数
__autoload() 可以单独使用,如果系统有多个autoload,则通过spl_autoload_register提高访问基本。
- 方法二使用
- 方法三使用
?
- smarty与已有项目结合需要注意问题
- 把自动加载函数处理好spl_autoload_register
- 模板通过smarty语法使用
- 在父类里边把smarty实例化好。
?
前置操作$tpl参数原理分析:
?
【自定义变量调节器】
{$name|lower} {$name|truncate:20}
- 变量修饰符可以嵌套使用
2. 自定义变量调节器
????自定义信息字号大小显示
????$smarty -> assign(‘addr‘, ‘beijing‘);
????{$addr}
????{$addr|change_size:30}
????<span tyle="font-size:30px;">beijing</span>
- 自定义调剂器代码
具体使用
?
?
【自定义函数使用】
1. {php}。。。{/php} 不推荐
3.1已经废除,需要SmartyBC支持
smarty3.1.14版本,是一个php5的高级版本模板引擎
该版本内部对函数名字有自己的命名风格:驼峰式命名
registerObject(新)-------------------register_object(旧)
registerFilter(新)--------------------register_filter(旧)
?
?
2. {strip}。。。{/strip}删除多余空白和回车
模板文件:注释、换行、回车,这样模板文件看起来可读性好
编译文件:模板文件的换行、回车在编译文件中也会体现出来,我们可以使用strip标签把编译文件的换行、回车给删除掉。
?
- debug 标签,调试,会给我们输出一个和smarty变量信息有关系的控制台
$smarty -> debugging = true;显示调试窗口
?
- {eval}。。。{/eval} 输出变量信息
- {fetch}。。。{/fetch}获得文件内容
{fetch file="http://www.baidu.com"}
?
- {cycle}。。。{/cycle}
交替出现
- {html_image}
生成图片标签
file
width
height
href=图片超链接地址
- {html_table}
表格标签
{html_checkboxes} {html_radios} {html_options}
?
????
?
- smarty属性
$compile_check =true; [编译检查变量]
一旦有关模板文件或配置文件被更新,编译文件将会被重建
在使用smarty时候,如果模板文件有发生改变,则立刻会显示已经更改
???????????????????? 如果php程序发生变化,页面不会立刻显示更改(需要更新编译文件)
?
该属性$compile_check如果为真,则模板文件或配置文件发生变化,就重新生成编译文件。
?
【常用方法】
1. append和assign区别使用
append:把变量放入smarty对象的数组里边
assign:把变量放入smarty对象的变量里边
- assignByRef()
????????
?
- clearAllAssign() 删除全部assign变量信息
- clearAssign() 删除指定assign变量信息
- configLoad() 引入配置变量????????
- {config_load file="site.conf" section="newyear"}
- $smarty -> configLoad("site.conf",‘newyear‘);
- clearConfig() 清除配置变量
????
7.
????display() 展示模板信息
fetch()???? 获得模板信息
display() = echo fetch();
总结:
- 自定义变量调节器
- smarty与已有的项目结合
- 自己项目的autoload与smarty的autoload做兼容处理
- 具体使用
- 在父类控制器实例化smarty
- 自定义函数 {debug} {html_image} {html_checkboxes}{html_radios}
- 常用方法
?
作业:
????1. 把smarty与之前的中级项目融合起来
????2. 在中级项目里边把smarty的布局继承效果体现出来
????3. 把数据从数据库获得出来,append(),再模板中通过smarty展现foreach
????4. 如果页面有公共部分,就把公共部分代码放到一个固定文件里边,其他模板include包含
????5. 把首页设置为缓存页面,用户信息设置"局部不缓存"
?
?
?
?
?
?
?
?
?
?
?
2013-12-07 昨天内容回顾
- 正则函数match下标0-n区别
- 模式单元 /(slkdkls)(slkdls)/ 0匹配到的全部内容 1-n具体模式单元内容
- g全局匹配 0-n 分别代表第一到第n个匹配到的内容(没有模式单元)
- 模式单元反向引用
- 模式 /(\\d+)(\\w+)\\1/ ‘2013hello2013‘
- 正则组合字符
- \\d 匹配0-9任意一个数字
- \\D 匹配非数字
- \\w 匹配字母、数字、下划线 一个
- \\W 非字母、数字、下划线
- \\s 匹配空格
- \\S 非空格
- \\b 单词边界(空格 , 开始或结尾的引号 \\n)
- \\B 单词内部
- 正则限制符
- {m} 限制前边的单元严格出现m次
- {m,} 限制前边单元最少出现m次,多了不限制
- {m,n} 限制前边单元最少出现m次,最多出现n次
- [^atyc] 匹配的信息不是atyc中的任意字母
- [^0-9] 非数字
?
【smarty模板技术】
模板:静态html文件就是模板
一般php 程序文件是 php程序和html代码混编 样式。
?
程序员专门开发php程序
html静态页面是美工人员开发
?
以上代码php和html有结合,如果系统升级或维护,这段代码就会使得程序员和美工互相推诿。
?
smarty模板技术的出现,会使得php程序和html代码在物理形式上有分离。
?
- 自定义smarty模板
????
- 为什么使用smarty
面试需要。
即使不使用smarty,也需要使用其他模板引擎。
- 使用smarty
????
?
- 灵活配置smarty
?
?
- 封装一个父类来配置smarty变量信息
?
- smarty里边可以使用哪些变量信息
6.1系统保留变量
6.2配置变量
6.3通过配置变量config让页面样式整体都发生改变
?
总结:
- smarty使用
- php html分开 smarty会使得php+html再次结合
?
?
assign()
????Smarty的父类Smarty_Internal_TemplateBase的父类Smarty_Internal_Data
display()
????Smarty的父类Smarty_Internal_TemplateBase
?
【给模板赋予变量信息assign和append方法】
assign是把信息赋予给一个具体变量,如果名字重复又覆盖情况
append是把信息赋予给一个数组,名字重复也可以同时存在,在访问的时候需要通过数组下标访问具体元素信息
?
【在模板中使用数组或对象信息】
- 在模板中使用数组:
- 在模板中使用对象
????????
?
【在模板中遍历数组】
1. foreach 具体使用
- foreach遍历二维数组
- foreach嵌套使用
?
- section
foreach可以遍历索引和关联数组
section只可以遍历索引数组
????????
?
- for循环语句
while循环
???? ?
????
【分支结构】
if elseif else
????
????
?
【获得复选框按钮】
options属性是values和output的集合属性
【下拉列表】
?
?
通过标签assign定义模板变量
????
?
总结:
- 在模板中使用数组或对象信息
- 数组[下标]
- 数组.下标
- 对象->成员
- 数组遍历
- foreach 索引关联的都可以遍历
- @index @iteration @first @last @show @total
- {break} {continue}
- section????索引数组
- name=gd loop max step
- {$smarty.section.gd.first}
- 分支结构
- if elseif else
- > <= < === is div by
- 自定义函数
- html_checkboxes
- html_options
- html_radios
?
作业:
- 在php中给模板传递变量信息,在模板中把信息显示出来,效果如模板
- 通过查手册练习smarty使用
?
?
???? ?
?
?
?
以上是关于合并_08smarty模板技术(3days)的主要内容,如果未能解决你的问题,请参考以下文章
Smarty模板中使用getpostrequestcookiessession变量的方法