Smarty模板技术.docx
- 文档编号:14478798
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:55
- 大小:1.74MB
Smarty模板技术.docx
《Smarty模板技术.docx》由会员分享,可在线阅读,更多相关《Smarty模板技术.docx(55页珍藏版)》请在冰点文库上搜索。
Smarty模板技术
模板引擎Smarty
目录
模板引擎Smarty1
一、模板引擎3
1、混合式编程(HTML+PHP)3
2、项目的开发流程3
3、什么是模板引擎3
4、模板引擎原理4
二、Smarty模板引擎6
1、什么是Smarty模板引擎6
2、为什么要学习Smarty6
3、下载安装7
4、Smarty项目部署(三步走)7
5、Smarty入门五步走7
三、详解Smarty工作流程9
1、smarty执行流程9
2、smarty执行原理图10
3、几个常用属性10
1)分界符10
2)与路径相关的四个属性10
3、默认值11
4、常用的方法12
四、设计篇12
1、模板注释12
2、模板中的变量13
1)从PHP中分配的变量13
2)从配置文件中读取变量15
3)在模板中直接定义变量15
3、Smarty中的常用保留变量16
4、变量调节器17
五、内建函数(sysplugins)21
1、capture函数21
2、config_load函数21
3、include_php函数22
4、insert函数23
5、ifelseifelse函数24
6、ldelim、rdelim函数25
7、literal函数26
8、foreach函数26
六、作业:
28
一、模板引擎
1、混合式编程(HTML+PHP)
编号 | 手机名称 | 价格 |
phpecho$row[‘id’]? > | phpecho$row[‘name’]? > | phpecho$row[‘price]? > |
优点:
开发迅速、语法简介
缺点:
后期维护基本无效
2、项目的开发流程
设计效果图-确认-设计HTML+CSS+JS-整合PHP代码-上线测试-确认-发布-推广
设计师-程序员-测试-客户不满意-设计师-程序员-测试-客户不满意-…
把我们HTML+PHP进行完全分离
HTML:
设计师
PHP:
程序员
3、什么是模板引擎
模板引擎,是指利用某种模板语言将页面制成模板,再依据业务逻辑将该模板语言翻译成业务数据,从而生成最终展示页面。
其目的就是要把页面与业务数据实现彻底分离。
我们在很多地方都可以看到模板引擎的身影,比如各种CMS、论坛、代码生成器,甚至是Mootools、JQuery等JavaScript库都用到了模板引擎。
换肤、换模板功能:
用到就是模板引擎
4、模板引擎原理
例1:
混合式编程
以上代码混合了HTML与PHP代码,后期非常难维护
例2:
分解以上代码,如下图所示
demo02.php
demo02.html
两个案例运行效果完全一致:
但是从代码分析可知,例2达到了PHP代码与HTML代码的完全分析,更方便后期维护。
5、封装一个自定义模板引擎
Template.php自定义模板引擎类
index.php
index.html
二、Smarty模板引擎
1、什么是Smarty模板引擎
smarty是一个基于PHP开发的PHP模板引擎。
它提供了逻辑与外在内容的分离。
2、为什么要学习Smarty
优点:
1)速度:
相对于其他模板引擎而言,Smarty具有更快的响应速度
2)编译型:
当我们调用模板页面时,都需要文件操作,文件操作需要服务器端I/O流的开销,而实际项目上线后,模板基本不会有任何改变,所以Smarty把模板页面转化为编译文件,当下一次访问,系统并不会直接调用模板重新生成,而是直接访问编译文件。
3)缓存技术:
编译速度<缓存速度<静态化技术
4)插件技术:
在smarty所有的内置标签或自定义标签都是通过类或函数定义的,我们可以对其进行扩展。
5)语句自由if/elseif/else/endif
缺点:
1)实时更新项目(股票、黄金)
2)小项目(一个人可以开发项目)
3、下载安装
Smarty官方网站
Smarty目录解析
libs目录解析
4、Smarty项目部署(三步走)
第一步:
复制libs目录到项目目录中,并更名为Smarty(名字任意,但要见名思义
第二步:
创建PHP入口文件
第三步:
创建templates文件夹作为项目模板目录,并创建模板文件
5、Smarty入门五步走
第一步:
在PHP入口文件中,引入Smarty入口文件
第二步:
创建smarty对象
第三步:
初始化信息(读取数据、设置相应内容)
第四步:
通过assign方法分配变量到模板文件
第五步:
通过display方法实现对模板内容的显示输出
示例代码:
demo01.php
templates/demo01.html
运行效果:
三、详解Smarty工作流程
1、smarty执行流程
当我们访问demo01.php页面时,系统会自动生成如下目录
当我们第一次访问html模板文件时,Smarty系统会自动生成html模板文件的编译文件,如上图所示,那么Smarty编译文件如何产生的呢?
又在何种情况下会发生变化?
答:
1)当我们第一次访问html模板时产生编译文件
2)当模板文件改变时,编译文件发生变化,如下图所示
说明:
在计算机系统中,任何一个文件都有三个时间
文件的修改时间会随着文件的修改发生变化,我们的Smarty系统自动记录了模板文件的最后修改时间,当其发生变化时,系统将重新生成编译文件。
2、smarty执行原理图
3、几个常用属性
1)分界符
●left_delimiter:
左分界符,默认为{
●right_delimiter:
右分界符,默认为}
在PHP入口文件,我们可以通过设置以上两个属性实现对分界符的定义
模板中可以采用如下方式进行访问
2)与路径相关的四个属性
●template_dir:
模板路径
●complile_dir:
编译路径
●config_dir:
配置文件目录
●cache_dir:
缓存目录
注:
在3.0之前版本以上四个属性是公有的
var$template_dir;
var$complile_dir;
var$config_dir;
var$cache_dir;
在全局外部可以正常调用,但是在3.0以后版本,以上四个属性都被声明私有属性private,但是在全局外部依然可以正常调用:
以上代码说明:
在Smarty类的内部肯定定义了__set与__get两个魔术方法,在Smarty.class.php中,代码如下
但是不推荐使用以上四个属性直接设置项目目录,推荐使用一下方法
●setTemplateDir():
设置模板路径
●setCompileDir():
设置编译目录
●setConfigDir():
设置配置文件目录
●setCacheDir():
设置缓存目录
3、默认值
模板目录:
templates
编译目录:
templates_c
缓存目录:
cache
配置目录:
configs
注:
在Smarty中,编译目录与缓存目录是会自动生成的,但是不推荐直接生成,建议在初始化项目自动建立template_c与cache文件夹。
4、常用的方法
assign()方法
调用该方法主要主要是为Smarty模板文件中的变量赋值,可以传递一对名称/数值对,也可以包含名称/数值对的关联数组
display()方法
基于smarty的脚本必须使用这个方法,而且一个脚本中只能使用一次,因为它负责获取和显示由Smarty引擎引用的模板。
四、设计篇
1、模板注释
基本语法:
{*Smarty注释*}
demo02.php
示例代码:
demo02.html
说明:
Smarty中模板注释属于服务端注释,所以其被不会输出显示在客户端浏览器的源码中。
2、模板中的变量
1)从PHP中分配的变量
2)从配置文件中读取变量
3)在模板文件中创建
1)从PHP中分配的变量
普通变量、数组、对象
示例代码:
demo02.html
运行效果:
2)从配置文件中读取变量
在Smarty中,配置主要用于页面信息的输出显示
demo03.html
configs/config.conf
3)在模板中直接定义变量
基本语法:
{assignvar=’变量名称’value=’变量的值’}
{$变量名称=’变量的值’}
调用形式如下:
{$变量名称}
3、Smarty中的常用保留变量
在Smarty系统,通过$smarty开头的变量都属于系统保留变量
$smarty.get.page:
相当于PHP中的$_GET[‘page’];
$smarty.post.page:
相当于$_POST[‘page’];
$smarty.cookies.username:
$_COOKIE[‘username’];
$smarty.server.SERVER_NAME:
$_SERVER[‘SERVER_NAME’];
$smarty.env.Path:
$_ENV[‘Path’];
$smarty.session.id:
$_SESSION[‘id’];
$smarty.request.username:
$_REQUEST[‘username’];
{$smarty.now}:
返回系统时间的时间戳
{$smarty.const}:
返回系统中的常量信息
{$smarty.capture}:
输出capture标签所捕获的内容
{$smarty.config}:
获取配置文件中的信息
{$smarty.section}:
读取section循环信息
{$smarty.template}:
读取当前正在操作的模板信息
{$smarty.current_dir}:
读取当前目录
{$smarty.version}:
读取当前Smarty版本号
{$smarty.ldelim}:
读取左分界符
{$smarty.rdelim}:
读取右分界符
注:
如需要使用ENV环境变量,请在php.ini文件中,设置一下变量:
示例代码:
demo04.html
运行效果:
4、变量调节器
变量调节器主要是对变量进行格式化。
基本格式
{$变量名称|调节器:
参数1:
参数2:
……}
常用的变量调节器:
{$var|capitalize}:
首字母大写
{$var|count_characters:
true}:
计算字符数,如果参数为true,则计算空格
{$var|cat:
var2}:
字符串连接
{$var|count_paragraphs}:
计算段落数
{$var|count_sentences}:
计算句子数
{$var|count_words}:
计算单词数
运行效果:
{$var|date_format:
”%Y%m%d”}:
时间格式化,%Y-%m-%d%H:
%M:
%S
{$var|default:
”value”}:
当变量为空时,设置默认值
{$var|escape}:
html转码
{$var|indent:
10:
”*”}:
字符缩进
{$var|lower}:
转小写
{$var|upper}:
转大写
{$var|nl2br}:
把\n转化为br标签
运行效果:
{$var|regex_replace:
”/[\t\n]/”:
””}:
正则替换
{$var|replace:
”aa”:
”bb”}:
字符替换
{$var|spacify:
”^^”}:
插空(在字符与字符之间插空)
{$var|string_format:
”%d”}:
字符串格式化%d:
格式化为整数%s:
格式化字符串
{$var|strip:
“*”}:
去除多余的空格
{$var|strip_tags}:
去除html标签
{$var|truncate:
30:
”…”}:
截取指定长度的字符(英文)
{$var|wordwrap:
30:
”
”}:
行宽约束
运行结果:
变量调节器还可以组合应用
基本语法:
{$var|capitalize|truncate:
30:
”…”|replace:
”aa”:
”bb”}
答:
首先把var变量的首字母大写,截取30个字符长度,并用…代替,替换子串aa为bb
五、内建函数(sysplugins)
1、capture函数
功能:
捕获一段内容,但不输出
基本语法:
{capturename=’变量名称’}
内容
{/capture}
调用:
{$smarty.capture.变量名称}
示例代码:
效果如下图:
2、config_load函数
功能:
读取配置文件信息
基本语法:
{config_loadfile=“file”section=“section”}
参数说明:
file:
要读取配置文件名称
section:
section节(类似局部变量)
示例代码:
config.conf
运行结果:
3、include_php函数
功能:
载入php页面到指定的变量中
基本语法:
{include_phpfile=“file”assign=“var”once=“true|false”}
参数说明:
file:
要载入php页面
assign:
载入成功后,赋予其值到var变量中
once:
是否只载入一次
注:
在3.0版本中,此方法已废弃,如想使用此功能,可以使用SmartyBC.class.php进行加载。
示例代码:
demo10_inclduephp.php
demo10.html
运行效果:
4、insert函数
功能:
实现对Smarty进行扩充
基本语法:
{insertname=“func”assign=“var”[var...]}
但是定义func函数时,一定要按照如下格式进行定义:
functioninsert_func(){......}
示例代码:
demo11.html
运行效果:
5、ifelseifelse函数
功能:
条件判断(分支)
基本语法:
{if}
{elseif}
{else}
{/if}
示例代码:
运行效果:
6、ldelim、rdelim函数
功能:
输出左右分隔符
基本语法:
{ldelim}
{rdelim}
示例代码:
运行结果:
7、literal函数
功能:
literal标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息.该特性用于显示有可能包含大括号等字符信息的css或javascript脚本.当这些信息处于{literal}{/literal}标签中时,模板引擎将不分析它们,而直接显示.
示例代码:
运行效果:
8、foreach函数
功能:
主要实现对数组的遍历输出
基本语法:
foreach,foreachelse
{foreachfrom=数组key=键name=名称item=内容}
{foreachelse}
{/foreach}
from:
要遍历输出的数组
item:
每次遍历时,系统会自动将遍历的结果放入item内容中
key:
键值,每次遍历时,系统会将遍历的键值放入key中
name:
foreach名称,为foreach起名
foreachelse:
当数组为空时,执行此句
例1:
通过foreach遍历一维数组
例2:
二维数组遍历
例3:
其他参数的使用
例4:
foreach附加属性
$smarty.foreach.name.index@index:
循环索引(默认从0开始)
$smarty.foreach.name.iteration@iteration:
循环迭代(当前是第几次循环)
$smarty.foreach.name.first@first:
当第一次循环时,此值为true
$smarty.foreach.name.last@last:
当最后一次循环时,此值为true
$smarty.foreach.name.total@total:
统计当前循环次数
示例代码:
运行效果:
六、作业:
通过Smarty+PHP完成分页程序
Smarty模板引擎
(二)
目录
Smarty模板引擎
(二)1
一、内建函数(sysplugins)2
1、php函数2
2、strip函数2
3、include函数3
4、section函数3
二、系统自定义函数(plugins)6
1、counter函数6
2、cycle轮显函数6
3、debug调试7
4、fetch函数8
5、html_image函数8
6、html_table函数9
7、html_options函数10
8、html_radios函数10
三、综合案例——分页系统11
1、设计HTML界面11
2、设计数据库11
3、配置项目(Smarty三步走)11
4、编写入口文件代码fenye.php12
5、编写HTML模板12
一、内建函数(sysplugins)
1、php函数
功能:
可以实现在模板页面直接输入php代码
基本语法:
{php}
echodate(“Y-m-d”);
{/php}
在Smarty3.0中已废弃,如果想使用此功能,请载入SmartyBC.class.php
示例代码:
运行效果
2、strip函数
功能:
去除任何位于{strip}{/strip}标记中数据的首尾空格和回车.这样可以保证模板容易理解且不用担心多余的空格导致问题
基本语法:
{strip}
//要格式化的字符串
{/strip}
示例代码:
运行效果:
3、include函数
功能:
文件包含,同时可以通过assign进行变量传递
{includefile=“file”assign=“var”[var...]}
首页——首先要开发的页面
列表页(栏目页)——头部和尾部公用,只有中间采用列表结构
内容页(文章页)——头部和尾部公用,只有中间是以文章形式显示输出
头部:
header.html
尾部:
footer.html
示例代码
运行效果:
4、section函数
功能:
实现对数组的遍历操作
注:
其只能遍历索引下标从0开始且连续的索引型数组
基本语法:
{sectionname=名称loop=循环数组(次数)start=开始(0)step=步阶
(1)max=最大循环次数}
{sectionelse}
{/section}
loop:
要遍历的数组
name:
section名称,每次遍历时,系统会自动将数组的索引小标放入name中
start:
从哪个索引开始遍历
step:
步阶,默认为1
max:
循环最大次数
sectionelse:
当数组为空时,系统自动执行此句
例1:
遍历一维数组
在php中有两种数组的遍历方式
for($i=0;$i echo$arr[$i]; } foreach($arras$row){ echo$row; } foreach(foreach)是真正完成了对数组的遍历,而for(section)循环只是对数组循环输出而已。 例2: 遍历二维数组 运行效果: 例3: sectionelse的使用 运行效果: 例4: 其他属性的使用 运行效果: 例5: 附加属性 {$smarty.section.name.index}: 循环索引,默认从0开始 {$smarty.section.name.index_prev}: 上一次循环索引,默认从-1开始 {$smarty.section.name.index_next}: 下一次循环索引 {$smarty.section.name.iteration}: 当前是第几次循环 {$smarty.section.name.first}: 当第一次运行时条件为真 {$smarty.section.name.last}: 当最后一次循环条件为真 {$smarty.section.name.total}: 循环的总次数 示例代码: 运行效果: 二、系统自定义函数(plugins) 1、counter函数 实现自动计数功能 {counterstart=0skip=2print=false} 参数说明: start: 起始位置 skip: 步阶 print: 当前是否打印 运行效果: 2、cycle轮显函数 实现对数值的轮显操作 基本语法: 示例代码: 实现隔行表色效果 运行效果: 3、debug调试 功能: 实现对php页面分配过来的变量或当前页面变量进行调试 基本语法: {debug} 运行效果: 4、fetch函数 功能: 载入外部文件到当前页面 基本语法: {fetchfile=“file”assign=“var”} 参数说明: file: 要载入文件的名称或路径 assign: 把载入的内容,放入var变量中 示例代码: 运行效果: 5、html_image函数 功能: 载入一张图片到当前页面,功能与img一致 {html_imagefile="pumpkin.jpg"} 参数说明: file: 文件路径 示例代码: 运行效果: 6、html_table函数 功能: 把简单数组转化table表格 基本语法: {html_tableloop=$datacols=4table_attr='border="0"'} 参数说明: loop: 要遍历的数组 cols: 每行显示多少列 table_attr: 表格的属性,多个属性之间通过空格隔开 示例代码: 运行效果: 7、html_checkboxes 功能: 把数组转化为复选框 基本语法: {html_checkboxesname=’cust’values=$cust_idschecked=$customer_idoutput=$cust_namesseparator=" 参数说明: name: 为checkbox命名 values: 为checkbox中的选项赋予value值,要求是一个数组 checked: 选中的值,要
"}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Smarty 模板 技术