Smarty学习笔记

6.10 看ThinkPHP遇到瓶颈,补学smarty 模版 (也是来培训前所遇到的最大的难关)

模版技术的分类
1. smarty 模版是官方推荐
2. phplib
3. 公司自己做

smarty模版使用细节

如何配置
--将解压后的 smarty 文件中的 lib 文件夹放在项目目录下
--创建模版文件夹 templates 和 编译后文件夹template_c

左右边界符 {  },一般会替换成使用<{  }>  模版内的注释使用<{* *}>
1. 修改Smarty.class.php中的设置
2. 动态修改
$smarty = new Smarty();
$smarty ->left_delimiter = '<{';
$smarty ->right_delimiter = '}>';
其他的设置都可以用这两种方法修改

是否使用缓存$smarty ->caching='false' ;
实时变化的网站如股票等,不要开缓存

分配变量的细节问题
可以分配PHP支持的各种数据类型(具体方法参看练习)

如何让我们的Smarty 模板直接从配置文件中取数据
什么时候可以考虑 : 当某个变量的值,不希望直接写死在程序中,就可以通过配置文件来获取(常见配置样式)
固定格式的配置文件:    key = 值
文件命名: my.ini my.conf
title = '我的第一个网站'
bgcolor = 'blue'

直接在tpl 文件中使用数据,不需要$Smarty -> assign()分配
test3.tp1
使用方法 : {config_load file ='路径'}
        {#要使用的数据#} 如 {#title#} 或者
        {#smarty.config.变量名}

Smarty 可以直接获取get.post,server ,session 等等数据
{$smarty.get.username}<br>
{$smarty.server.SERVER_NAME}
但是不常用,Smarty模板本身就是为了实现显示界面与数据处理分离

Smarty內建函数(in_build)
{foreach from = ### item = ### key = ###}
{if}  {else| elseif} ....{/if}
{/foreach}


6-11
smarty自定义函数
系统预置自定义函数(如assign等等)  ,  用户自定义函数

自己添加自定义函数 :
1. 在$smarty 中 注册
注意 Smarty 3 取消了register_function  改为registerPlugin

2. 以插件的形式增加(普通)自定义函数 (免去注册的步骤)
文件名 : function.函数名.class.php
函数名 : smarty_function_函数名
将自定义函数文件直接放到smarty/libs/plugin 中
具体参看相关文件下的系统函数的规范

增加块函数
文件名 block.块函数名.class.php
函数名 smarty_block_块函数名

小结 :
1. 內建函数(我们不能修改)
2. 自定义函数(smarty 本身提供一些 , 自己也可以编写)

06-12

阶段小项目 : mvc  + Smarty 留言板项目

1. 画出框架图
2. 数据库
-- emp 表
create table emp (
    emp_id int unsigned key auto_increment,
    emp_name varchar(64) not null default '' unique,
    emp_pwd char(32) not null
)charset = utf8;
-- message表
create table `message` (
    message_id int unsigned key auto_increment,
    sender varchar(64) not null,
    getter varchar(64) not null,
    sendtime datetime not null,
    content varchar(2000) not null
)charset = utf8;
-- 插入测试数据
insert into emp values
(100,'大宝剑',md5('123')),
(101,'小宝剑',md5('123')),
(102,'宝剑',md5('123'));

insert into `message` values
(default , '大宝剑' , '小宝剑' , now(), '赶紧还钱'),
(default , '小宝剑' , '大宝剑' , now(), '没钱不还'),
(default , '大宝剑' , '小宝剑' , now(), '赶紧还钱')
3 .代码.......



6-16
细节 :
模板文件界面使用js , 可以直接写在模板界面中 ,
 外部引用需要用 smarty  引入, 才能通过Smarty 替换外部js文件中的Smarty标签内容    {include file='路径'}
 注意 : 因为是通过Smarty引入  ,js文件内需要写上<script>标签


 smarty 语法细节

 变量的分类
 1. php分配的变量
 2. 从配置文件中读取的变量
 3. Smarty保留变量

数学计算可以直接应用到变量   如    {$变量 * 2}  
注意:
1 . 无法使用括弧改变运算顺序
2 . 只能进行简单运算 + - * / %等

Smarty中的注释  左定界符 * * 右定界符  如  { *  *}   

访问常量 : {$smarty.const.常量}

**** Smarty模板中的调节器 ****

变量操作符(调节器) , 用于变量 , 自定义函数 和 字符串 , 可以实现多种实用的功能 , 如 : 首字母大写 , 拆分 , 替换 , 截取 ... 更像是php的内置函数

基本语法 {变量名(自定义函数,字符串) | 调节器名: 参数1 : 参数2 : ..}
注意 : 因为底层使用正则匹配到关键字 替换  , 代码里的空格字符 , 应谨慎
如  {$smarty.now|date_format:"%Y年%m月%d日 %H时%i分%S秒"}  格式化输出当前年月日
从本质看 , 调节器就是函数 , 主要用于对字符串的处理

调节器可以自定义 , 以插件的形式给出
smarty -> plugins 中按规范直接加入调节器文件
文件名 modifier.xxx.php 函数名 smarty_modifier_xxx

常用调节器 (详情参看手册)

--单词首字母大写 {$str|capitalize}

--计算字符数 {$str|count_characters}

--拼接字符串 {$str|cat:"str"}

--正则表达式替换
{$str|regex_replace:"正则规范":"替换值"}

--插空 spacify  给每个字符间 插入添加的值 , 不给属性 默认插入空格
{'abc'|spacify:'^_^'}  

--字符串格式化 string_format 格式化规范遵循 php的 printf()

--截取 truncate
应用 : 只显示文章的前10 个字符  ,其它用....显示 , 类似显示文章简介的效果
{$str2|truncate:'10':'被截掉的部分的显示方式 ,不给默认是...':'是否精准截取,默认是否 , 块即如果截取结尾处未能把单词截完整 , 则放弃后面的截取'}
细节 :
1. 截取的字符长度 = 显示的部分 + 被截掉部分的显示方式
如上 , 截取$str2的前十个字符 , 其它显示为... , 则实际显示为 $str2 的前7 个字符 + 三个点 = 10个字符
2. 中文字符在截取时 , 可能会因为预留字符不够而显示乱码 ,
解决方法 : 将truncate升级为支持utf8版本的插件 , 网上找资源


组合修改器
对于同一个变量 , 可以使用多个修改器 . 他们讲从左到右按照定好顺序依次组合使用. 不同的修改器间 用 | 隔开


内建函数详解 :

capture :
1. 捕获模板输出的数据并将其存储到一个变量里 , 而不是把它们输出在页面
2. 任何在 {capture name = 'foo'} 变量 | 字符串 | include文件 {/capture}之间的数据都被存储到变量$foo中 , 该变量由name属性决定
3. 模板中通过 $smarty.capture.foo 访问变量 , 如果没有指定name的属性 , 函数将默认将使用 default 作为参数
4.  {capture} 必须成对出现 , 该函数不能嵌套使用

foreachelse :
当 foreach 取不到值时 , 显示的数据

include : 引入其他文件
{include file = 'url'}
1 . include 可以将引入文件的变量等全部数据获取
2 . include 时 直接写变量 {include file='url' 变量名 = '值''}

smarty 缓存机制
创建一个cache 的目录(默认是cache , 可以修改)
//开启缓存
$smarty -> caching = true;
...
细节 :
1 . 缓存的默认时间 : 3600 秒 ,可以设置
2 . 启用缓存后 , 在缓存的时间内 , 新加的php代码并不会被加载到缓存文件
3 . 缓存时间时长的设置 十分重要
4 . 局部缓存技术
smarty 中可以用 insert 解决下

insert 文件类似 include 函数 , 不同之处是 insert 所包含的内容 不会被缓存 , 每次调用模板都会重新执行insert 操作

  if 函数可以对变量进行简单判断
  如   {if $num1 is odd} 判断是否是奇数 {/if}

{literal} 这里的数据会当做 文本 处理{/literal}

内嵌php脚本 , 不推荐
$smarty -> php_handing =true;
{php} php脚本 {/php}

section/sectionelse 类似 foreach/foreachelse   遍历数组 属性繁多 , 建议使用时参看手册
{section name = 取的数组名字(fruit) loop=循环的数组($arr)  start=1(从数组中第二个值开始取) step=2 (步长 , 每隔2个取一次)}
{$数组[名字]}( $arr[fruit]) )
{/section}

取二维数组
{section name = fruit loop = arr}
{$arr[fruit].下标}
{/section}


自定义函数详解

assign 分配变量和值
细节 : 可以直接在模板文件中分配 , 不推荐

counter 计数器 , 用于输出一个记数过程 , counter 保存了每次计数时的当前记数值
语法 :
{counter start='开始值' skip='步长' print='true/false(本次是否输出)' name='计数器名字'}


cycle : 循环使用一组值
{cycle values='green,silver'}

fetch : 取得 本地文件 || http || ftp 文件 , 并显示文件的内容
{fetch file='url' assign='变量名'}
细节 :
设置了assign 属性, 则内容不会直接输出 ,而是保存在了assign指定的变量中

html_checkboxes : 根据指定的数据创建 复选 按钮
{html_checkboxes options=$数组变量 checked=$默认选中的数组变量 separator = '分隔符' name='复选按钮的名字,默认是checkbox'}  

$arr2 = array('pg' =>'苹果','xj'=>'香蕉' , 'xg' => '西瓜' ,'tz' =>'桃子');
$checked = array('pg','tz');
细节:
 分隔符可以不写 , 默认是空格

 html_options : 生成下拉框
 {html_options  options = $hobby  selected=$sel}

 html_radius : 生成单选按钮 (所有的html_ 自定义函数用法都类型 , 参看手册)

 
 6.18  

 自定义函数详解(二)

 pupup 函数----弹出窗口(花样多, 参看手册或相关文档)
 整合了overlib 库 , 用于控制弹出窗口的函数库 , 可用于敏感信息如帮助窗口或工具提示 . 使用popup函数 , 在页首需要调用popup_init 函数(前提是需下载overlib 函数库)
 {pupop_init src ='引入overlib函数库的overlib.ks文件'}
 <a   href = '###' {popup text = '提示语句 , 可以时html 的格式( 这就可以做好多事了)} >超链接</a>

append  : 添加指定的元素到数组中
如果添加一个字符串  , 该字符串会被转换为数组格式后在进行添加
如果第三个可选参数是 ture , 所添加的数据会和数组中现有数据进行合并 , 而不是直接添加
基本语法 :
$smarty -> append('数组名' , '字符串,数组,变量');

append_by_rel : 引用的方式添加

clear_all_assign : 清除所有已赋值到模板中的值



*********smarty 缓存技术 *********

静态缓存的配置
1. 缓存目录 , 默认cache
$smarty -> cache_dir = '/cache/';
2. 开启缓存 , 为false 时无法开启
$smarty -> caching = ture ;
3. 缓存时间 , 单位秒
$smarty -> cache_lifetime = 60;
注意  :
1. 该缓存指的是为模板准备的数据变量给缓存起来 ,生成了的缓存化静态页面 ,如果更改变量的值 , 在缓存时间内 ,不会变化 .
如果更改的是模板文件的本身结构 等 ,还是会发生变化
2. 所谓的缓存时间 , 其实是将当前时间 与 生成的缓存文件 的修改时间作对比 , 如果时间差大于设置的缓存时间 , 才会重新生成新的缓存文件  , 否则请求被打回


局部缓存技术 :

insert 函数 :
基本语句 :
模板文件
{insert name = '函数名'}
php文件
function insert_函数名 (){
    函数体(这其中的数据不会被缓存)
}

smarty_block 函数也可以实现局部缓存 ---待商榷, 报错
{blockname}
当前时间 : {$smarty.now}
{/blockname}

细节 :
1. 为模板文件生成带id的缓存文件
$smarty -> display('模板' , 缓存id)
2. 清除所有缓存 , 可以指定参数(整数) , 指定清除缓存时间超过多少秒的缓存
$smarty -> clear_all_cache();
3. 清除指定模板文件的缓存
$smarty -> clear_cache('模板文件');
4. 清除指定id 的 缓存
$smarty -> clear_cache('模板文件',缓存id)

smarty 调用 对象 :
细节 :
可以直接调用一个对象的属性 , 也可以调用方法, 前提都是公开的

smarty 过滤器 :   预过滤器  后过滤器   输出滤镜
预过滤器 : 发生在 php文件读取模板文件动作的最前
后过滤器 : 发生在 php文件生成 编译后文件动作的最前
输出滤镜 : 发生在编译后文件显示在浏览器动作的最前






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值