php smarty模板引擎的使用
2016-12-14 16:06
302 查看
php smarty模板引擎的使用
使用smarty,却没有做过简单的总结,简单总结下Smarty优点:
1. 速度:采用smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。 2. 编译型:采用smarty编写的程序在运行时要编译成一个非模板技术的PHP文件,这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中,而不再进行模板重新编译(在源程序没有改动的情况下) 3. 缓存技术:smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页,当设定smarty的cache属性为true时,在smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来,这相当于调用一个静态的HTML文件。 4. 插件技术:smarty可以自定义插件。插件实际就是一些自定义的函数。 5. 模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。
Smarty缺点
1、浪费内存。如$_smarty_tpl_vars = $this->_tpl_vars;,两个变量,占用了两倍以上的内存(虽然使用后unset掉了)。 2、浪费处理器。smarty语法最后是要转换成php脚本供输出的。转换要浪费处理器资源。如果是编译好的缓存中的脚本,则浪费判断是否有编译好的脚本的处理器时间。 3、语法不兼容。smarty有自己的一套语法,与PHP不兼容,也和其它的模板语言不兼容。模板引擎也没有一个统一的通用的语法,各自为政。
smarty的常用配置
$this->Smarty(); //模板路径 $this->template_dir = '/web/www.mydomain.com/smarty/guestbook/templates/'; //编译路径 $this->compile_dir = '/web/www.mydomain.com/smarty/guestbook/templates_c/'; //配置路径 $this->config_dir = '/web/www.mydomain.com/smarty/guestbook/configs/'; //缓存路径 $this->cache_dir = '/web/www.mydomain.com/smarty/guestbook/cache/';
注释的语法
模板注释被*号包围,例如 {* this is a comment *}
函数的使用
{funcname attr1="val" attr2="val"}. 比如包含模板的函数include {include file="topinfo.html"}
属性
属性可以是使用引号,也可以不使用
{include file="header.tpl"} {include file=$includeFile} {include file=#includeFile#} {html_select_date display_days=yes} <SELECT name=company> {html_options values=$vals selected=$selected output=$output} </SELECT>
双引号里面嵌入值
Smarty可以识别嵌入在双引号中的变量,只要此变量只包含数字、字母、下划线和中括号[].对于其他的符号(句号、对象相关的,等等)此变量必须用两个'`'
{func var="test $foo test"} <-- sees $foo {func var="test $foo_bar test"} <-- sees $foo_bar {func var="test $foo[0] test"} <-- sees $foo[0] {func var="test $foo[bar] test"} <-- sees $foo[bar] {func var="test $foo.bar test"} <-- sees $foo (not $foo.bar) {func var="test `$foo.bar` test"} <-- sees $foo.bar
基本的运算
{$foo+1} 加法 {$foo*$bar} 乘法 {* some more complicated examples *} 注释 {$foo->bar-$bar[1]*$baz->foo->bar()-3*7} 乘法 {if ($foo+$bar.test%$baz*134232+10+$b+10)}乘法和加法 {$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"} 字符串处理 {assign var="foo" value="`$foo+$bar`"} 赋值语句
smarty的变量
{$Name} {$Contacts[row].Phone} 在php脚本中赋值: $tpl->assign("test","test123"); 在模板中使用:{$test}
从配置文件读取的变量
配置文件中的变量需要通过用两个"#"或者是smarty的保留变量 $smarty.config.来调用 例如: 定义配置文件foo.conf,在smarty的config路径里面,内容如下 pageTitle = "This is mine" 在模板文件里面 {config_load file="foo.conf"} {#pageTitle#}
smarty常用的变量调节器,主要是一些字符串操作的函数
调节器列表:~~ 我们需要阅读手册啦 capitalize count_characters count_paragraphs count_sentences count_words date_format default escape indent lower nl2br regex_replace replace spacify string_format strip strip_tags truncate upper wordwrap 例如截取字符串{#pageTitle#|truncate:5:"..."} {#pageTitle#|capitalize} 修改器可以组合 使用|去连接 {#pageTitle#|capitalize|truncate:5:"..."}
include 包含模板
Include 标签用于在当前模板中包含其它模板. 当前模板中的变量在被包含的模板中可用. 必须指定 file 属性,该属性指明模板资源的位置. 例如 {include file="topinfo.html"} 如果设置了 assign 属性,该属性对应的变量名用于保存待包含模板的输出,这样待包含模板的输出就不会直接显示了。 {include file="topinfo.html" title1="Main Menu"table_bgcolor="#c0c0c0"} 在topinfo.html中可以使用title1
include_php 可以包含php脚本–{include_php} is deprecated, 被废弃了
例如 {include_php file="/path/to/load_nav.php"}
insert
Insert 函数类似欲 inluce 函数,不同之处是 insert 所包含的内容不会被缓存,每次调用该模板都会重新执行该函数. getBanner函数名 lid 参数1 sid参数2 {insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
if,elseif,else
{if $name eq "Fred"} Welcome Sir. {elseif $name eq "Wilma"} Welcome Ma'am. {else} Welcome, whatever you are. {/if}
literal
Literal 标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息. 该特性用于显示有可能包含大括号等字符信息的 javascript 脚本. 当这些信息处于 {literal}{/literal} 标签中时,模板引擎将不分析它们,而直接显示.
foreach
foreach 是除 section 之外处理循环的另一种方案(根据不同需要选择不同的方案). foreach 用于处理简单数组(数组中的元素的类型一致),它的格式比 section 简单许多,缺点是只能处理简单数组. foreach 必须和 /foreach 成对使用,且必须指定 from 和 item 属性. name 属性可以任意指定(字母、数字和下划线的组合). foreach 可以嵌套,但必须保证嵌套中的 foreach 名称唯一. from 属性(通常是数组)决定循环的次数. foreachelse 语句在 from 变量没有值的时候被执行. {foreach from=$status_arr key=key item=v} <option value="{$key}" {if $key==$status}selected="selected"{/if}>{$v}</option> {/foreach}
section
模板的 section 用于遍历数组中的数据. section 标签必须成对出现. 必须设置 name 和 loop 属性. 名称可以是包含字母、数字和下划线的任意组合. 可以嵌套但必须保证嵌套的 name 唯一. 变量 loop (通常是数组)决定循环执行的次数. 当需要在 section 循环内输出变量时,必须在变量后加上中括号包含着的 name 变量. sectionelse 当 loop 变量无值时被执行. 数组 {section name=val loop=$status_arr} <span>{$status_arr[val]}</span> {/section} 关联数组 {section name=elem loop=$list} <span>{$list[elem].status_val}</span> {/section}
smarty自带的函数
函数列表 assign counter cycle debug eval fetch html_checkboxes html_image html_options html_radios html_select_date html_select_time html_table math mailto popup_init popup textformat 自定义函数的使用方式 {funcname xx}
assign
assign 用于在模板被执行时为模板变量赋值.
php脚本中smarty 类含有的方法
Smarty对象提供的方法 append 添加 append_by_ref 引用添加 assign 赋值 assign_by_ref 引用赋值 clear_all_assign 清除所有赋值 clear_all_cache 清除所有缓存 clear_assign 清除赋值 clear_cache 清除缓存 clear_compiled_tpl 清除已编译模板 clear_config 清除配置 config_load 加载配置 display 显示 fetch 取得输出的内容 get_config_vars 取配置变量的值 get_registered_object 取得已注册的对象 get_template_vars 取得模板变量的值 is_cached 是否已被缓存 load_filter 加载过滤器 register_block 注册一个块 register_compiler_function 注册编译函数 register_function 注册函数 register_modifier 注册修饰器 register_object 注册对象 register_outputfilter 注册输出过滤器 register_postfilter 注册提交过滤器 register_prefilter 注册预过滤器 register_resource 注册资源 trigger_error 触发错误 template_exists 模板是否存在 unregister_block 注销一个块 unregister_compiler_function 注销编译函数 unregister_function 注销函数 unregister_modifier 注销修饰器 unregister_object 注销对象 unregister_outputfilter 注销输出过滤器 unregister_postfilter 注销提交过滤器 unregister_prefilter 注销预过滤器 unregister_resource 注销资源 append 添加 void append (mixed var) void append (string varname, mixed var) void append (string varname, mixed var, boolean merge)
display方法
显示方法 $tpl->display('svn_log_list.html');
fetch方法
获取脚本内容 $output = $smarty->fetch("index.tpl");
cache
$smarty->caching = true; $smarty->display('index.tpl'); $smarty->caching = 2 $smarty->cache_lifetime = 300; //清除所有缓存 $smarty->clear_cache(null,"sports");
实现一个简单的模板引擎
smarty手册传送门
相关文章推荐
- 构造使用类C语言的脚本引擎(2)实现虚拟机和虚拟机调试
- --=== 让你的程序开始说话(在VB中使用文字朗读引擎(TTS)技术)===--
- OffScreen渲染、引擎在各种程序中的使用
- 源码推荐:一个使用C#绘制图形引擎的Framework
- HOWTO:使用Osql工具管理SQLServer桌面引擎(MSDE2000)
- 使用 Drools 规则引擎实现业务逻辑
- .NET下水晶报表,使用过程中,提示查询引擎错误
- [TORQUE游戏引擎DTS文件技术总结]终于搞定太史慈的DTS,现在可以完全使用ORC的DSQ文件了
- HOWTO:使用Osql工具管理SQLServer桌面引擎(MSDE2000
- Visual Fortran 中使用Matlab引擎心得
- 使用 SpiderMonkey 使 C++应用支持 JavaScript 脚本引擎
- 使用 Osql 工具管理 SQL Server 桌面引擎 (MSDE 2000)
- 使用 Osql 工具管理 SQL Server 桌面引擎 (MSDE 2000)
- HOW TO:使用 Osql 工具管理 SQL Server 桌面引擎 (MSDE 2000)
- (转载)使用 COM 符号引擎辅助调试
- 使用VC6编译和使用Ogre引擎(完全版)
- 使用php重新实现PHP脚本引擎内置函数
- 论文涉及技术:使用 portlet 与业务流程引擎建立连接
- 使用Spring来创建一个简单的工作流引擎
- PhysX SDK物理引擎开发包使用教程