播客php第39期04smarty模板技术smarty_第1页
播客php第39期04smarty模板技术smarty_第2页
播客php第39期04smarty模板技术smarty_第3页
播客php第39期04smarty模板技术smarty_第4页
播客php第39期04smarty模板技术smarty_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单击此处填加标题原理剖析基本使用项目应用自定义模板引擎,全方位深入理解模板引擎原理站在前端开发人员的角度,学习如何使用smarty模板引擎站在PHP开发人员的角度,在项目中使用smarty模板引擎目录CONTENTS开篇Question:什么是模板技术?(从当前项目引出)为什么需要模板技术?(从典型的开发流程加以分析)常见的模板技术有哪些?1. smarty介绍smarty是什么?Smarty是一个PHP的模板引擎,提供让程序逻辑与页面显示(HTML/CSS)代码分离的功能。 也就是PHP代码是程序逻辑,与页面显示分开。smarty特点 速度:使用smarty可以获得最大速度的提高(相对于其它

2、模板引擎技术)。 编译型:在下一次访问模板时直接访问编译文件,而不再进行模板重新编译。 缓存技术:可以将用户最终看到的HTML文件缓存成一个静态的HTML页。 插件技术:smarty可以自定义插件。插件实际就是一些自定义的函数。 强大的表现逻辑:模板中可以使用if/elseif/else/endif、foreach等。基础篇-smarty快速入门2. 获取官方网址: smarty 2.x 兼容PHP 4 的写法smarty 3.x 基于PHP 5,完全面向对象3. 安装基础安装,解压缩即可,目录结构介绍4. 使用 创建相应目录(templates 和 templates_c) 编写php文件(

3、实例化smarty对象,设置目录,分配变量、载入模板) 编写模板文件 浏览器访问,查看结果(观察编译文件)注意:目录名称可随意指定(加不加/都可以),模板文件可以是任何后缀基础篇-smarty快速入门1. 定界符写法和XHTML标签 非常类似,默认的定界符是 和 注意细节 任何在定界符之外的内容,都是静态的,是不会被解析的(包括php代码) 和 $ 中间不能有任何空格,否则将不会解析。 如果在页面中有css和js,会怎么样呢? 默认的定界符是可以修改的解决css和js冲突a. 所有以 开头的地方,都空一格b. 将css和js以外部的方式引入c. 使用内置函数 literald. 更改定界符基础

4、篇-smarty基本语法站在前端开发人员的角度使用smarty。包括定界符、注释、变量和函数。2. 注释在使用模板标签的时候,也可以加注释,语法如下:* 这只是一个注释 *底层处理,直接忽略也分为单行注释和多行注释,写法都一样不能嵌套使用基础篇-smarty基本语法3. 变量之assign在smarty中,变量的来源可以分为三种 通过assign分配的变量 (使用最多,重点介绍) 保留变量 从配置文件获取的变量变量类型针对assign来源,通常有如下三种: 标量 (int、float、string、boolean) 数组 对象 (使用相对较少) 注意细节 对于数组(索引和关联),可以使用 和点

5、两种形式。它们的解析结果是一样的。基础篇-smarty基本语法4 变量之保留变量有一些变量,不需要在php中分配,而是在模板中直接使用的,比如九大超级全局变量($_GET,$_POST,$_COOKIE,$_SESSION等)以及 smarty 本身的一些信息,这就是smarty保留变量。 注意细节 虽然Smarty提供了较方便直接访问PHP超全局变量及常量的方法,但必须谨慎使用。 直接访问超全局变量会弄乱应用程序底层代码和模板语法。 最佳的实践是从PHP将需要的变量对模板进行赋值再使用基础篇-smarty基本语法使用方法:$smarty.保留变量5. 变量之配置变量网站上有一些比较的简单的变

6、量信息,美工人员 可以自行定义并调用。这样可以脱离程序员的依赖,工作比较有主动权。定义格式:使用方式:#配置名# 或者 $smarty.config.配置名 注意细节 配置变量必须先载入配置文件才能使用,使用config_load函数载入 配置信息可以分段设置,此时需要在引入时使用section指定段名(对比php.ini) 可以在配置文件中添加注释基础篇-smarty基本语法smarty 提供了if、else、elseif三个内置函数用于分支结构 注意细节 每个if 都必须有一个配对的 /if 所有在php中使用的条件表达式和函数都可以在if 内使用 在smarty模板标签中,可以进行数学运

7、算的基础篇-内置函数之if/elseforeach 用于循环,是专门用来处理数组的,尤其是多维数组其语法和php中的foreach是一致的,有两种形式,如下: foreach $arr as $value foreach $arr as $key =$valueforeach还有一些属性,非常有用,有以下5个 index , 当前数组索引,从0开始计算 iteration,当前循环的次数,从1开始计算 first,首次循环时,该值为true last,循环到最后一次时,该值为true total,总的循环次数,可在foreach内部使用,也可以在循环完成之后使用 show,在foreach循环

8、执行完之后,检测循环是否显示数据的判断 注意细节 还带一个 foreachelse的分支,当$arr中没有内容时会执行 smarty 2写法 foreach from = $arr key = key item=value 也是可以支持的基础篇-内置函数之foreachsection 可以循环遍历索引数组,(通常是连续数字索引),不能遍历关联数组。 注意细节 loop 后面接的通常是 分配过来的数组,也可以直接写一个数字,如果接的是一个数组,则会计算其长度,作为其循环总次数。 而item 相当于数组的索引值,即 0 ,1, 2,这样的索引值。 和foreach类似,可以使用 index、ite

9、ration、first、last、total等属性,访问方式 $.index,其中name就是name属性的值。基础篇-内置函数之section需求:在模板中输出当前时间 在php程序中获取到时间(已格式化),然后分配到模板中 直接使用保留变量,但没格式化变量修饰器,专门用来处理这种情况。它可以用于变量、字符串。也叫变量调节器。使用格式: 在变量的后面加上 | ,然后就是修饰器的名称,如果有参数,则使用冒号(:)隔开,多个参数则使用多个冒号。 注意细节 除了smarty自带的一些调节器之外,php中的函数也是可以直接使用的 可以在一个变量上使用多个变量调

10、节器,多个之间使用 | 隔开即可 可以自定义变量修饰器函数基础篇-变量修饰器作为前端开发人员,经常需要根据分配过来的变量,输出各种表现形式的html,如表单、表格等。除了可以使用 foreach 来输出这些内容之外,smarty 还 自带了一些自定义的函数插件,可以在模板内使用常见函数插件介绍 单选框 复选框 下拉列表 cycle基础篇-函数插件前面的安装方式,只是在学习时使用的,在开发项目的时候,显然不合适。需要每次要定义路径,设置属性,十分繁琐。更灵活的方式是使用扩展类来安装Smarty和初始化。 代替反复地定义路径,赋同样的值等等,我们可以把这些操作放在一个地方进行。以我们的shopcz

11、 为例进行整合应用篇-进阶安装站在PHP开发人员的角度使用smarty。包括进阶安装、模板包含、模板继承、缓存需求:使用smarty完成内容页的输出存在问题: 在每个控制器都需要引入 smarty 并实例化。 每一个页面都有头部和底部,如果有数据输出的话,则需要分配多次,输出多次。改进一,在前台定义一个基础控制器,并实例化smarty对象,完成公共操作。改进二,将网站的公共部分,如头部、底部 独立出来,然后在各个页面中引入即可。smarty提供了 模板包含机制,使用内置函数include应用篇-模板包含需求:在我们在网站中,经常会出现这样的情况,就是很多模板页面都有相同的头部、底部和菜单部分。

12、模板包含,但是它通常是针对于,公共部分比较少的情况,如果公共部分比较多的话,比如后台,或用户中心,使用继承会更加方便。继承是从面向对象编程引入的概念,模板继承可以让你定义一个或多个父模板(布局),提供给子模板来进行扩展。 扩展继承意味着子模板可以覆盖部分或全部父模板应用篇-模板继承灵活使用模板继承一般网站布局分为两种:上中下、上左右下。比如首页、列表页等是上中下, 而用户中心通常则是上左右下。如果按照常规方法,我们需要维护两个布局模板,为了最大化的重用代码,我们可以设计如下布局:应用篇-模板继承 注意细节 布局页面可以有许多block,子级页面也可以有许多block,通过name属性进行关联。

13、 子级页面除了extends和block其他内容不予显示 布局页面的block可以有默认内容,子级页面不实现就直接显示,实现就覆盖。 布局页面的block可以彼此嵌套,子级实现可以有针对性实现。 $smarty.block.child布局可以调用子级的内容,$smarty.block.parent子级页面可以调用父级页面内容应用篇-模板继承如果smarty 自带函数 以及 php 函数都不能满足我们的需求了,则可以自定义变量修饰器函数。查看libs 下的 plugs目录应用篇-插件扩展所有的变量调节器都是在这里定义的使用缓存可以大大提供网站性能。常见的缓存方法有如下两种: 数据缓存 页面缓存使

14、用缓存 设置缓存目录 开启缓存 设置缓存时间关于缓存文件的更新,有以下几种情况: 删除缓存文件 模板文件有改动(包含文件、布局文件) 缓存文件过期,(cache_lifetime的值)应用篇-使用缓存在项目中使用缓存注意,需要判断,查看日志或开启debug模式使用了页面缓存之后,整个页面上所有的内容都会被缓存起来,但是有些数据使用缓存是有问题的,比如时间显示,用户信息等。类似这样的需求,我们可以通过局部不缓存来解决。smarty 提供了三种方式,来实现局部不缓存 标签的缓存控制,即在标签中使用 nocache 属性,适用于单个标签 变量的缓存控制,即在分配变量时设置第三个参数为 true,适用

15、于单个变量 模板区域缓存控制,即在模板页面中使用nocache /nocache,适用于一块区域 注意细节 局部不缓存的本质,还是动态的访问程序,可以查看缓存页面来验证。 变量不缓存的设置,会在编译后的代码中起效。所以如果你重新设置了某个变量不缓存,那么你需要删除已经存在的编译和缓存文件,使得模板可以重新编译并起效。 应用篇-局部不缓存需求:在我们的商城中,需要对商品详情页进行缓存,此时会出现什么情况呢?发现所有的商品页面都是同一个,这显然是不对的。实际上,我们需要针对每一个商品都生成一个缓存页面。这就是单模板多缓存。在smarty中,实现单模板多缓存很简单,只需要在调用display()的时候,设置cache_id就可以了。 应用篇-单模板多缓存需求:在我们的商城中的列表页中,如图所示:现在需要生成多个组合的缓存,也就是针对上述 四种 筛选条件,做排列组合,需要每种情况都生成一个缓存文件,如何实现?smarty 提供的 缓存组 就是专门用来解决这种需求的,它可以通过设置 $cache_id 更精细的组织我们的缓存。只需要在$cache_id 值中使用 | 来设置缓存组即可。应用篇-缓存组需求:在网站后台,我们经常需要进行一个操作-清除缓存。在smarty中,提供了两种方式

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论