TP6 assign json 给模板使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TP6 assign json 给模板使用相关的知识,希望对你有一定的参考价值。

参考技术A TP6 控制器模板输出

前端接收

亲测可用,转自: https://www.jianshu.com/p/abb40a3fa412

合并_08smarty模板技术(3days)

2013-12-9 昨天内容回顾

  1. 两个常用方法assign()和display()
    1. assign方法给模板传递变量信息(实际是把信息给到smarty对象属性里边)
    2. append方法给模板传递变量信息,和assign的区别是以数组形式传递给模板,可以使用名字一样的变量信息
    3. display()方法展示模板, 后缀.html。
    4. 一般实际在使用的时候,模板的后缀习惯是 .tpl,这样别人就不会直接过来访问。
  2. 模板中3种变量使用
    1. assign给模板传递的变量使用
    2. 系统保留变量 get post session cookie now config {$smarty.get.名字}
    3. 配置变量信息 config/site.conf {config_load file="site.conf" section="段"}
      1. {#名字#} {$smarty.config.名字}
      2. 配置变量信息可以使得页面整体css样式发生快速变化
      3. [newyear]
      4. color=XX
      5. backcolor=XX
      6. [yuandan]
      7. color=XX
      8. backcolor=XX
  3. 模板中使用数组元素和对象属性
    1. 数组[下标]
    2. 数组.下标
    3. 以上两种方式支持索引和关联数组的使用
    4. 对象->属性 (对象方法也支持使用)
  4. foreach遍历数组(索引和关联数组都可以遍历)
    1. {foreach 数组 as $k => $v}
    2. {foreachelse}
    3. 数组为空
    4. {/foreach}
    5. @first 判断是否是第一条信息 {[email protected]}
    6. @last
    7. @iteration
    8. @index
    9. @total
    10. @show 数组是否为空
    11. section(索引数组)
  5. 复选框和下拉列表使用
    1. {html_checkboxes option=$数组 selected=$数组 separator=" "}
    2. {html_checkboxes value=$数组 output=$数selected=$数组 separator=" "}
    3. {html_options option=$数组 selected=$数组}

?

【继承、布局】

?

技术分享技术分享

  1. 布局页面

    技术分享

  2. 子级页面

    技术分享

?

【模板文件包含】

技术分享

技术分享

?

【模板内容捕捉】

一个广告内容在一个页面的多个地方同时显示

<div>具体广告内容</div>

技术分享

【变量调节器】

变量调剂器在linux系统里边称作"管道"

?

调节变量

????$name = "liNkEn";

????{$name} // liNkEn

????{$name|lower} 把变量调节为小写的 //linken

????{$name|upper} 把变量调节为大小的 //LINKEN

????{$name|count_charactor} 计算变量字符长度 //6

?

????变量经过"函数"调节后在输出,变量与函数中间使用 | 竖线连接

????变量没有在页面上正常输出,而是成为了后者调节函数的输入参数

????变量调节器:前者的输出是后者的输入

?

????技术分享

技术分享

?

不同操作系统换行符号显示

技术分享

?

【smarty与mvc项目结合使用】

?

技术分享

技术分享

?

总结:

  1. 布局、继承 extends block
    1. <{ }> < {extends}>
  2. 模板包含 {include file="public/XX"}
  3. 变量调节器 truncate date_format lower upper
  4. smarty与mvc框架结合

?

练习:把smarty融入进自己的项目

?

【缓存】

两种类型缓存:

????①:缓存静态的html代码

????②:把数据库获得到的数据给缓存起来

?

????我们在页面上看到的信息是通过php程序生成出来,最终以html代码形式展现出来的。

????网站的信息,在相当一段时间不会随便发生变化,那么我们就把php生成好的html代码给缓存起来,下次用户再访问网站,就不用再次请求php解析,直接访问静态的html代码。

?

????缓存介质:文件、内存(使用最多)、数据库

????借助smarty实现静态html代码缓存

????在实际工作环境中使用最多的缓存是memcache内存缓存。缓存的是数据库的数据信息,并不是静态html代码。

????

????什么地方适合使用静态html代码缓存:

????门户新闻网站。

?

  1. 通过smarty实现html静态化缓存

    技术分享

    技术分享

  2. 缓存时间

    ‘cache_lifetime‘ => 3600,

    $smarty -> cache_lifetime = 20;

    $smarty -> isCached(‘模板文件‘); 判断缓存是否存在

    ?

?

  1. $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. 单模板多缓存

????技术分享

技术分享

  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()函数应用

????缓存集合

作业:

  1. 自定义小型mvc框架,实现集成smarty
  2. 所有Controller控制器有父类,在父类里边实例化smarty使用
  3. 通过"家教模板"实现继承和布局效果
  4. 练习缓存使用

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

???? ?

???? ?

?

?

2013-12-10 昨天内容回顾

  1. 布局继承效果
    1. extends block
    2. 有父级页面 和 子级页面
    3. 布局laoout父级页面
    4. parent.html
    5. <html>
    6. <head></head>
    7. <body>
    8. <div>头部信息</div>
    9. {block name="left"}{/block}
    10. {block name="right"}{/block}
    11. <div>脚部信息</div>
    12. </body>
    13. <html>
    14. 子级页面来继承
    15. 子级页面
    16. son.html
    17. <html>
    18. <head>
    19. <style>XXXX</style>{*不起作用*}
    20. </head>
    21. {extends name="parent.html"}
    22. {block name="left"}XXXXXX{/block}
    23. </html>
    24. 子级页面的css样式不起作用,原因是子级页面只能有两样东西:extends 和 block
    25. 可以把css样式放入{block}标记里边就可以起作用
  2. 模板包含include
    1. {include file="公共部分" assign="XX"}
    2. {$XX}
  3. 模板捕捉capture
    1. 可以使用capture标签捕捉一段静态代码内容,在页面其他地方使用这个内容非常方便
    2. {capture name="XX" assign="YY" append="ZZ"}<div>静态内容</div>{/capture}
    3. 具体使用:
    4. {$smarty.capture.XX}
    5. {$YY}
    6. {$ZZ[0]}
  4. 变量调节器
    1. 前者的输出等于后者的输入
    2. {$name|lower}
    3. {$name|upper}
    4. {$content|truncate:20} 截取内容只显示17个字符,后边有3个点
    5. {$mytime|date_format:"%Y"} 时间格式化显示
    6. linux操作系统也有变量调节器,称为"管道"
  5. 与mvc结合使用
    1. 在配置文件引入smarty
    2. smarty实例化是在许多控制器的父类里边实例化的(好处是所有控制器都可以直接使用smarty,不必重新实例化)
  6. 缓存设置使用
    1. 开启缓存 $smarty -> caching=1/2;
    2. 缓存有效期问题,可以通过两方便判断缓存是否过期
    3. 1. smarty->cache_lifetime熟悉判断
    4. 2. 根据每个缓存文件自己的缓存时间进行判断

    技术分享技术分享

    技术分享技术分享
    e) 单模板多缓存

    ????数据分页要为每个分页都制作缓存

    ????display("模板",编号page_id);

    1. 删除缓存
    2. clearCache(模板)
    3. clearCache(模板,编号)
    4. clearAllCache()删除全部缓存
    5. 局部不缓存设置
    6. {nocache}{/nocache}
    7. {$name nocache}
    8. $smarty -> assign(name,value,true);
    9. function insert_age(){不被缓存内容} {insert name="age" assign="XX"}
    10. 缓存集合
    11. display(模板,"hello|world|beijing");
    12. display(模板,"hello|world|shanghai");
    13. clearCache(null,‘hello/world‘);
    14. clearCache(‘模板‘,‘hello|world|shanghai‘); 只删除hello/world/shanghai下的指定模板

?

【缓存原理】

  1. 缓存的静态文件是如何生成

    答:是把"php缓冲区"内容获得到,生成静态文件。

????

//ob_start(); 开启php缓冲区

//ob_flush(); 输出php缓冲区内容

//ob_get_contents(); 获得php缓冲区内容

//ob_clean() 清空php缓冲区内容

//ob_get_clean(); 获得php缓冲区内容,并且清空缓冲区

//flush()输出浏览器缓冲区内容

?

  1. 开启php缓冲区:

技术分享

  1. php缓冲区和浏览器缓冲区内容直接输出,不要停留

技术分享

  1. 获得php缓冲区内容并直接存入文件

技术分享

  1. 缓冲区相关函数

技术分享

  1. 火狐浏览器对缓存处理

技术分享

7. ????????php程序被访问执行流程与缓存关系????

????????技术分享

?

【smarty执行流程】

编译文件: html+php混合代码文件

缓存文件:html静态代码

?

执行顺序关系:

????如果开启缓存,首先执行缓存文件

????没有开启缓存,执行编译文件即可

技术分享

  1. 前置过滤器使用

    技术分享

  2. 后置过滤器

    技术分享

  3. 输出过滤器

    技术分享

  4. 过滤器为我们带来的显著好处

    可以通过过滤器集中处理我们的"编译文件"和"缓存文件"

    尤其在MVC框架里边使用,只要在父类控制器集中设置好过滤器,所有的编译文件和缓存文件都会起作用

  5. 强制重新生成编译文件(先删除)

    技术分享

?

?

高级特性

  1. 数据对象
    1. 数据出现背景

    技术分享

    b) 具体使用数据对象

    技术分享

  2. 对象注册

    我们可以给模板传递一个对象

    在模板中对象的"属性"和"方法"都可以使用

    ?

    对象注册研究的是对象的方法

    1. 对象注册功用:

    对象注册 可以限制模板中对象访问的自己的具体方法。

    技术分享

    2. 注册对象只对方法其作用,不关系属性

  3. 注册对象具体使用

    技术分享

    技术分享

总结:

  1. 缓存原理(页面静态化过程) 抓取php缓冲区内容生成静态文件。
  2. ob_flush() flush()
  3. 过滤器使用
  4. 数据对象,同一个请求的许多模板里边可以使用相同名字的变量,而没有冲突
  5. 注册对象:可以限制模板中对象访问的具体方法,只关心方法,不关心属性

?

【smarty与已有项目结合】

????smarty与已有项目结合:

????技术分享

????

????调试自动加载函数

?

  1. 使用自动加载函数

    技术分享

    __autoload() 可以单独使用,如果系统有多个autoload,则通过spl_autoload_register提高访问基本。

  2. 方法二使用

    技术分享

  3. 方法三使用

    技术分享

?

  1. smarty与已有项目结合需要注意问题
    1. 把自动加载函数处理好spl_autoload_register
    2. 模板通过smarty语法使用
    3. 在父类里边把smarty实例化好。

?

前置操作$tpl参数原理分析:

技术分享

?

【自定义变量调节器】

{$name|lower} {$name|truncate:20}

  1. 变量修饰符可以嵌套使用

技术分享

2. 自定义变量调节器

????自定义信息字号大小显示

????$smarty -> assign(‘addr‘, ‘beijing‘);

????{$addr}

????{$addr|change_size:30}

????<span tyle="font-size:30px;">beijing</span>

  1. 自定义调剂器代码

    技术分享

    具体使用

    技术分享

?

?

【自定义函数使用】

1. {php}。。。{/php} 不推荐

技术分享

3.1已经废除,需要SmartyBC支持

smarty3.1.14版本,是一个php5的高级版本模板引擎

该版本内部对函数名字有自己的命名风格:驼峰式命名

registerObject(新)-------------------register_object(旧)

registerFilter(新)--------------------register_filter(旧)

?

技术分享

?

2. {strip}。。。{/strip}删除多余空白和回车

模板文件:注释、换行、回车,这样模板文件看起来可读性好

编译文件:模板文件的换行、回车在编译文件中也会体现出来,我们可以使用strip标签把编译文件的换行、回车给删除掉。

?

  1. debug 标签,调试,会给我们输出一个和smarty变量信息有关系的控制台

$smarty -> debugging = true;显示调试窗口

?

  1. {eval}。。。{/eval} 输出变量信息

    技术分享

  2. {fetch}。。。{/fetch}获得文件内容

    {fetch file="http://www.baidu.com"}

    技术分享

?

  1. {cycle}。。。{/cycle}

交替出现

技术分享

  1. {html_image}

    生成图片标签

    file

    width

    height

    href=图片超链接地址

    技术分享

  2. {html_table}

    表格标签

    {html_checkboxes} {html_radios} {html_options}

    ?

????技术分享

?

  1. smarty属性

$compile_check =true; [编译检查变量]

一旦有关模板文件或配置文件被更新,编译文件将会被重建

在使用smarty时候,如果模板文件有发生改变,则立刻会显示已经更改

???????????????????? 如果php程序发生变化,页面不会立刻显示更改(需要更新编译文件)

?

该属性$compile_check如果为真,则模板文件配置文件发生变化,就重新生成编译文件。

?

【常用方法】

1. append和assign区别使用

append:把变量放入smarty对象的数组里边

assign:把变量放入smarty对象的变量里边

技术分享

  1. assignByRef()

    技术分享

    技术分享

????????技术分享

?

  1. clearAllAssign() 删除全部assign变量信息
  2. clearAssign() 删除指定assign变量信息
  3. configLoad() 引入配置变量????????
    1. {config_load file="site.conf" section="newyear"}
    2. $smarty -> configLoad("site.conf",‘newyear‘);
  4. clearConfig() 清除配置变量

    技术分享

????

7.

????display() 展示模板信息

fetch()???? 获得模板信息

display() = echo fetch();

技术分享

技术分享技术分享

总结:

  1. 自定义变量调节器

    技术分享

  2. smarty与已有的项目结合
    1. 自己项目的autoload与smarty的autoload做兼容处理
    2. 具体使用
    3. 在父类控制器实例化smarty
  3. 自定义函数 {debug} {html_image} {html_checkboxes}{html_radios}
  4. 常用方法

?

作业:

????1. 把smarty与之前的中级项目融合起来

????2. 在中级项目里边把smarty的布局继承效果体现出来

????3. 把数据从数据库获得出来,append(),再模板中通过smarty展现foreach

????4. 如果页面有公共部分,就把公共部分代码放到一个固定文件里边,其他模板include包含

????5. 把首页设置为缓存页面,用户信息设置"局部不缓存"

?

?

?

?

?

?

?

?

?

?

?

2013-12-07 昨天内容回顾

  1. 正则函数match下标0-n区别
    1. 模式单元 /(slkdkls)(slkdls)/ 0匹配到的全部内容 1-n具体模式单元内容
    2. g全局匹配 0-n 分别代表第一到第n个匹配到的内容(没有模式单元)
  2. 模式单元反向引用
    1. 模式 /(\\d+)(\\w+)\\1/ ‘2013hello2013‘
  3. 正则组合字符
    1. \\d 匹配0-9任意一个数字
    2. \\D 匹配非数字
    3. \\w 匹配字母、数字、下划线 一个
    4. \\W 非字母、数字、下划线
    5. \\s 匹配空格
    6. \\S 非空格
    7. \\b 单词边界(空格 , 开始或结尾的引号 \\n)
    8. \\B 单词内部
  4. 正则限制符
    1. {m} 限制前边的单元严格出现m次
    2. {m,} 限制前边单元最少出现m次,多了不限制
    3. {m,n} 限制前边单元最少出现m次,最多出现n次
    4. [^atyc] 匹配的信息不是atyc中的任意字母
    5. [^0-9] 非数字

?

【smarty模板技术】

模板:静态html文件就是模板

一般php 程序文件是 php程序和html代码混编 样式。

?

程序员专门开发php程序

html静态页面是美工人员开发

?

技术分享

以上代码php和html有结合,如果系统升级或维护,这段代码就会使得程序员和美工互相推诿

?

smarty模板技术的出现,会使得php程序和html代码在物理形式上有分离。

技术分享技术分享

?

  1. 自定义smarty模板

    技术分享

????技术分享

技术分享

技术分享

  1. 为什么使用smarty

    面试需要。

    即使不使用smarty,也需要使用其他模板引擎。

  2. 使用smarty

    技术分享

????技术分享

?

  1. 灵活配置smarty

    技术分享

    技术分享

    ?

    技术分享

    ?

  2. 封装一个父类来配置smarty变量信息

    技术分享

?

  1. smarty里边可以使用哪些变量信息

    技术分享

    6.1系统保留变量

    技术分享

    6.2配置变量

    技术分享

    6.3通过配置变量config让页面样式整体都发生改变

    技术分享

    技术分享

    技术分享

    ?

总结:

  1. smarty使用
  2. php html分开 smarty会使得php+html再次结合

?

?

assign()

????Smarty的父类Smarty_Internal_TemplateBase的父类Smarty_Internal_Data

display()

????Smarty的父类Smarty_Internal_TemplateBase

?

【给模板赋予变量信息assign和append方法】

技术分享

assign是把信息赋予给一个具体变量,如果名字重复又覆盖情况

append是把信息赋予给一个数组,名字重复也可以同时存在,在访问的时候需要通过数组下标访问具体元素信息

?

【在模板中使用数组或对象信息】

  1. 在模板中使用数组:

    技术分享

技术分享

  1. 在模板中使用对象

    技术分享

????????技术分享

?

【在模板中遍历数组】

1. foreach 具体使用

技术分享

技术分享

  1. foreach遍历二维数组

    技术分享

  2. foreach嵌套使用

    技术分享

    ?

    1. section

      foreach可以遍历索引和关联数组

      section只可以遍历索引数组

????????技术分享

?

  1. for循环语句

    技术分享

    while循环

???? ?

????

【分支结构】

if elseif else

????技术分享

????技术分享

?

【获得复选框按钮】

技术分享技术分享技术分享

技术分享

options属性是values和output的集合属性

技术分享

技术分享

【下拉列表】

技术分享

技术分享

?

?

通过标签assign定义模板变量

????技术分享

?

总结:

  1. 在模板中使用数组或对象信息
    1. 数组[下标]
    2. 数组.下标
    3. 对象->成员
  2. 数组遍历
    1. foreach 索引关联的都可以遍历
    2. @index @iteration @first @last @show @total
    3. {break} {continue}
    4. section????索引数组
    5. name=gd loop max step
    6. {$smarty.section.gd.first}
  3. 分支结构
    1. if elseif else
    2. > <= < === is div by
  4. 自定义函数
    1. html_checkboxes
    2. html_options
    3. html_radios

?

作业:

技术分享

  1. 在php中给模板传递变量信息,在模板中把信息显示出来,效果如模板
  2. 通过查手册练习smarty使用

?

?

???? ?

?

?

?

以上是关于TP6 assign json 给模板使用的主要内容,如果未能解决你的问题,请参考以下文章

合并_08smarty模板技术(3days)

一些模板

ThinkPHP 模板展示display和assign的用法

tp6模型无法写入

使 conn.assigns 在多个 Phoenix 视图/模板中可用

Smarty模板函数