smarty是一个PHP模板引擎。smarty读取模板文件然后用他们创建PHP脚本。
smarty的安装
require('smarty.class.php');
$smarty=new smarty;
模板设计者
基本语法:{*注释*}
函数{config_load file="colors.conf"}
变量
从php分配的变量
$smarty=new smarty;$smarty->assign('firstname','dog');
从配置文件读取的变量
配置文件中的变量需要通过两个"#"或者smarty的保留变量来调用
<title>{#pageTitle#}</title>
{$smarty}保留的变量
{$smarty.now}{$smarty.const}{$smarty.capture}{$smarty.config}{$smarty.section}
{$smarty.foreach}{$smarty.template}
变量调节器
变量调节器用于变量,自定义函数和字符串。使用"|"符号和调节器名称应用调节器。参数由':'分开。
<h2>{$title|upper}</h2>
capitalize首字母大写 count_characters字符计数 cat连接字符串count_paragraphs计算段数count_sentences 计算句数
count_words计算词数date_format格式化日期default默认值escape编码indent缩进lower小写nl2br换行符替换成<br>
regex_replace正则替换replace替换spacify插空string_format字符串格式化strip去除strip_tags去除html标签
truncate截取upper大写wordwrap行宽约束
组合修改器
对于同一个变量,可以使用多个修改器。使用"|"字符作为它们之间的分隔符
{$articleTitle|upper|spacifu|truncate}
内建函数
capture函数的作用是捕获模板输出的数据并将其存储到一个变量里,而不是输出页面。
config_load用于从配置文件中加载变量
foreach,foreachelse
include用于在当前模板中包含其他模板,当前模板中的变量在被包含的模板中可用,必须指定file属性,改属性指明模板资源的位置。
if elseif else
section sectionelse
strip 去除空格
自定义函数
assign用于在模板被执行时模板变量赋值
counter用于输出一个计数过程counter保存了每次计数时的当前计数值
cycle用于轮转使用一组值,使特性得在表格中交替输出颜色或者轮转使用数组中变得容易。
debug将调试信息输出到页面上,该函数是否可用取决于smarty的debug设置
eval按处理模板的方式计算取得变量的值,该特性用于在配置文件中的标签中嵌入其他模板标签
fetch用于从本地文件系统,http或者ftp上取得文件并显示文件的内容
html_checkboxes根据给定的数据创建复选按钮组。
html_p_w_picpath产生一个图像的HTML标签,如果没有提供高度和宽度值,将根据图像的实际大小获取
html_options根据给定的数据创建选项组,该函数可以指定哪些元素被选定
html_radio根据给定的数据创建单选按钮组
html_select_date用于创建日期下拉菜单,它显示任意年月日
html_select_tome用于创建时间下拉菜单,它显示任意时分秒
html_table将数组中的数据填充到html表格中
math允许模板设计者在模板中进行数学表达式计算
mailto自动生成电子邮件链接,并根据选项决定是否对地址信息编码
popup_init整合overlib库,这些函数用于上下文敏感信息的提示
popup用于创建javascript弹出窗口
textformat用于格式化文本
配置文件
配置文件有利于设计者管理文件中的模板全局变量。
#global variables
pageTitle ="main menu"
bodyBgColor=#000000
tableBgColor=#000000
rowBgColor=#00ff00
[customer]
pageTitle="customer Info"
[login]
pageTItle="login"
focus="username"
intro="""this is a value"""
#hidden section
[.database]
host=my.domain.com
db=ADDRESSBOOK
user=php-user
pass=foobar
调试控制台
smarty里面有一个调试控制台,它可以告诉你模板里面包含的所有内容,同时也可以为当前使用模板中的变量和配置文件变量赋值。
debug.tpl的模板包含了很多控制调试控制台格式化的smarty类。

常量
smarty_dir定位smarty类文件的完整系统路径,如果没有定义smarty目录msmarty将会试着自动创建合适的值。
变量
$template_dir模板目录变量 $compile_dir编译目录变量 $config_dir配置目录变量 $plugins_dir插件目录变量
$debugging调试变量$debug_tpl调试模板变量$debugging_ctrl调试控制变量$global_assign全局配置变量$undefined未定义变量
$autoload_filters自动加载过滤器变量$compile_check编译检查变量$force_compile强迫编译变量$caching缓冲变量
$cache_dir缓存目录变量$cache_lifetime缓存生存时间变量$config_overwrite配置重写变量$security安全变量
$secure_dir安全目录变量
方法
append添加 append_by_ref引用添加assign赋值assign_by_ref引用赋值clear_all_assign清除所有赋值clear_all_cache清除所有缓存clear_compiled_tpl清除已编译模板clear_config清除配置config_load加载配置display显示fetch取得输出的内容
is_cached是否被缓存register_block注册一个块register_function注册函数register_object注册一个对象
register_resource注册资源template_exists模板是否存在unregister_resource注销资源
缓存
建立缓存
require('smarty.class.php');
$smarty=new Smarty;
$smarty->caching=true;
$smarty->display('index.tpl');
$smarty->cache_lifetile=300;
每页多个缓存
可以用单个函数display()或fetch()输出多个缓存文档。display('index.tpl')在多条件下会有
不同的输出内容,要单独把缓存分开。可以通过函数的第二参数cache_id来达到效果。
require('smarty.class.php');
$smarty=new Smarty;
$smarty->caching=true;
$my_cache_id=$_GET['article_id'];
$smarty->display('index.tpl',$my_cache_id);
缓存集合
可以通过建立cache_id集合做更详细的集合体。在cache_id的值里用"|"来分开子集合。
控制插件输出的缓冲能力