您的位置:首页 > 编程语言 > PHP开发

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手册传送门
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: