一。基本配置
第一步:下载smarty:官网www.smarty.net
第二步:加载类文件和更改配置
1. //加载类文件
require_once ‘../libs/Smarty.class.php‘;
//实例化对象
$smarty=new Smarty();
//更改配置  如果不更改就不用写
$smarty->setTemplateDir(‘./templates‘);//设置模版目录
$smarty->setCompileDir(‘./templates_c‘);//设置编译目录
$smarty->setCacheDir(‘./cache‘);//设置缓存目录
$smarty->setConfigDir(‘./configs‘);//设置配置文件所在目录
$smarty->addPluginsDir(‘./plugins‘);//添加插件目录
$smarty->left_delimiter=‘{‘;
$smarty->right_delimiter=‘}‘;
//设置缓存
$smarty->debugging = true;  //开启的调试窗口
$smarty->caching = true;
$smarty->cache_lifetime = 120;
第三步:许可变量与显示
$smarty->assign(‘chen‘,‘123‘);
//显示模版
$smarty->display(‘1.html‘);
二。常见类型的输出
$smarty->assign(‘int‘,PHP_INT_MAX);
$smarty->assign(‘float‘,12.3);
$smarty->assign(‘bool‘,true);
$smarty->assign(‘string‘,‘this is a test‘);
$smarty->assign(‘arr‘,array(‘a‘,‘b‘,‘c‘,‘username‘=>‘king‘,‘age‘=>12));
$smarty->assign(‘arr1‘,array(‘a‘=>array(1,2,3),‘b‘=>array(11,22,33)));
$smarty->assign(‘obj‘,new Test());
$smarty->assign(‘resource‘,fopen(‘index.php‘,‘r‘));
$smarty->assign(‘null‘,NULL);
class Test{    
    public $username;
    public $email;
    public $sex;
    public function __construct(){
        $this->username=‘king‘;
        $this->email=‘382771946@qq.com‘;
        $this->sex=‘男‘;
    }
    public function sayHi(){
        echo ‘Say Hi To Everybody<br/>‘;
    }
    public function test(){
        return ‘this is a test‘;
    }
}
三、模板注释
{*模版注释,注释不会在模版文件的最后输出中出现*}
    {*这是HTML注释不一样*}
四、在模板中定义变量
通过assign在模板中声明变量
{  assign var=num1 value=1 }
num1:{$num1} <br />
声明变量
    {$test="hello"}
    {$test} <br />
标签嵌套
{$test1="{$test} chen"}
 {$test1} <br />
声明数组
    {assign var=arr3 value=[1,2,3]}
    {$arr3.0} <br />
    {$arr3[1]} <br />
    {assign var=arr4 value=[‘username‘=>‘queen‘,‘age‘=>12]}
    {$arr4.username} <br />
    {$arr4[‘age‘]} <br />
    {$arr5=[‘a‘,‘b‘,‘c‘,[‘test‘=>‘test‘,‘test1‘=>‘test1‘,‘eee‘]]}
    {$arr5.0} <br />
    {$arr5[3][‘test‘]} <br />
    {$arr5[3][0]} <br />
    可变变量
    {$world=‘world‘}
    {$hello_world="this is hello world"}
    {$hello_{$world} <br />
四、预保留变量
session_start();
$_SESSION[‘username‘]=‘admin‘;
$_SESSION[‘id‘]=1;
define(‘TEST‘,‘This is a test‘);
在模板中
{$smarty.session.username}
{$smarty.session.id}
可以使用的预保留变量
1>页面请求变量
$smarty.get.page 相当于PHP中的$_GET[‘page‘]
$smarty.post.page 相当于PHP中的$_POST[‘page‘]
$smarty.cookies.username 相当于PHP中的$_COOKIE[‘username‘]
$smarty.session.username 相当于PHP中的$_SESSION[‘username‘]
$smarty.server.SERVER_NAME 相当与PHP中的$_SERVER[‘SERVER_NAME‘]
$smarty.env.PATH 相当于PHP中的$_ENV[‘PATH‘]
$smarty.request.username 相当于PHP中的$_REQUEST[‘username‘]
得到当前的时间戳
{$smarty.now}
{$smarty.now|date_format:‘%Y-%m-%d %H:%M:%S‘}
{time()}
{date("Y-m-d H:i:s",time())} 
得到PHP脚本中的常量的值
PHP版本:{$smarty.const.PHP_VERSION} <br />
PHP_OS: {$smarty.const.PHP_OS} <br />
{$smarty.const.TEST} 
得到配置文件中的值
{config_load "reset.conf"}
title:{$smarty.config.title} <br />
title:{#title#} <br />
返回经过处理的当前模版名(不包含目录)
当前模版名称:{$smarty.template} <br />
返回当前的模版目录名
当前模版目录名称:{$smarty.current_dir} <br />
返回Smarty的版本号
Smarty Version:{$smarty.version} <br />
返回当前的左右定界符
左定界符:{$smarty.ldelim} <br />
右定界符:{$smarty.rdelim} <br />
其它常用:
{$smarty.capture}:捕获内置的capture模版输出
{$smarty.section}:用来指向section循环的属性
{$smarty.block.child}:返回子模版文本块
{$smarty.block.parent}:返回父模版文本块
五、变量调节器
capitalize:将变量里的单词的首字母大写,ucwords*
单词首字母大写:{$test|capitalize} 
{$test|ucwords} 
{*count_characters:计算变量值里的字符个数,
参数值boolean型决定是否计算空格数,默认不计算*}
字符个数:{$test|count_characters}
字符个数带空格:{$test|count_characters:true} 
cat:将cat里的参数值连接到给定的变量后面,默认为空
连接字符:{$test|cat:‘!‘:‘<br/>‘:‘hello world!‘:"maizixueyuan"} 
count_paragraphs:计算变量里的段落数量
段落数量:{$content|count_paragraphs} 
count_sentences:计算变量里的句子,句子由点号、问号或感叹号分隔(.?!)。
段落中的句子: {$content|count_sentences} 
count_words:计算变量的单词数
单词数:{$content|count_words}
date_format:日期格式化
{$smarty.now|date_format:"%Y-%m-%d"} <br />
赋初始值
为变量赋初始值:{$kickName|default:‘king‘} <br />
{*escape HTML转码,URL转码等,默认是HTML转码*}
默认没有转码
{$string} <br />
转换HTML实体或者写escape:‘html‘
{$string|escape} <br />
{$string|escape:‘html‘} <br />
lower|upper转换成小写或者大写
{$string1|lower}  <br />
{$string1|upper}  <br />
indent产生缩进,第一个参数指定缩进多少个字符,默认是四个字符;
第二个参数,指定缩进用什么字符代替
{$string1|indent:4} <br />
{$string1|indent:4:‘*‘} <br />
nl2br 将字符串中的换行符转换成<br/>像PHP中的nl2br()
{$string2|nl2br} <br />
replace:字符串替换,第一个参数是搜索的内容;
第二个参数是搜索到之后替换的内容;
相当于PHP中的str_replace()函数*}
{$string2|replace:‘maizi‘:‘麦子‘} <br />
spacify:在字符串的每个字符之间插入空格或者其它字符,默认是空格
{$string2|spacify} <br />
{$string2|spacify:‘*‘} <br />
strip:替换所有重复的空格,换行和tab为单个或者指定的字符串;
可以指定要替换的字符串
*}
{$string2|strip} <br />
{$string2|strip:‘?‘} <br />
{*strip_tags:去除所有的HTML标记*}
{$string3} <br />
{$string3|strip_tags} <br />
{*string_format:格式化字符串*}
{$number=3.1415926}
{$number} <br />
{$number|string_format:"%.2f"} <br />
{$number|string_format:"%d"} <br />
对于同一个变量,你可以使用多个修改器。它们将从左到右按照设定好的顺序被依次组合使用。 使用时必须要用"|"字符作为它们之间的分隔符。
转换成实体|小写|用*进行缩进
{$string|escape|lower|indent:‘4‘:‘*‘} <br />
也可以使用PHP的系统函数
{$string4=‘maiziedu‘}
{$string4|substr:2:2} <br />
{$string4|strtoupper} <br />
系统中默认的变量调节器函数都是Smarty自带的插件
都在plugins目录下
{$filename=‘1.txt.jpeg‘}
{$filename|ext} <br />
<hr />
{$string4|font:‘20px‘:‘green‘:‘Microsoft Yahei‘:‘normal‘}
<hr />
{$string4|font:‘30px‘:‘purple‘:‘华文彩云‘:‘bold‘} <br />
{$string4|strShuffle} <br />
六、Smarty模版中的内置函数
assign 声明变量
{assign var=‘username‘ value=‘king‘}
用户名:{$username} <br />
相当于assign函数属性的简写
{assign username test}
用户名:{$username} <br />
相当于assign的缩写,直接写变量名称=值
{$username=‘queen‘}
用户名:{$username} <br />
{$array=[‘a‘,‘b‘,‘c‘,1,2]}
{$array.0} <br />
通过append动态追加元素
{append var=‘array‘ value=‘d‘}
{append var=‘array‘ value=‘king‘ index=‘username‘}
{print_r($array)}
<hr />
<h3>流程控制相关</h3>
{$username=‘maizi‘}
 1、 if
{if $username==‘maizi‘}
欢迎 <br />
{/if}
3、if...else
{if $username eq ‘maizi1‘}
    Hello Maizi1 <br />
{else}
    Hello Everybody <br />
{/if}
3、if ... elseif...
{$day=3}
{if $day==1}
星期一 <br />
{elseif $day==2}
星期二 <br />
{else}
非法日期
{/if}
4、is [not] div by是否能整除
{$num1=8}
{if $num1 is div by 4}
整除 <br />
{else}
不能整除 <br />
{/if}
5、is[not] even是否为偶数
{$num1=3}
{if $num1 is not even}
不是偶数 <br />
{else}
是偶数 <br />
{/if}
6、for循环
步长为1的简单循环
{for $var=1 to 10}
{$var} <br />
{/for}
设置步长
{for $var=1 to 10 step 2}
{$var} <br />
{/for}
通过max设置最大循环次数
{for $var=1 to 100 step 2 max=10}
{$var} <br />
{/for}
当循环条件不成立的时候可以使用forelse
{for $var=5 to 1}
{$var} <br />
{forelse}
循环条件不成立时执行的代码 <br />
{/for}
使用while循环
{$var=10}
{while $var>=0}
{$var--} <br />
{/while}
遍历数组可以通过foreach 和 section进行遍历
通过foreach进行遍历*
{$arr=[‘a‘,‘b‘,‘c‘,‘d‘]}
{if is_array($arr)}
    {foreach $arr as $k=>$v}
        键名={$k}---键值={$v}
        <hr />
    {/foreach}
    <hr />
    {foreach $arr as $v}
    键值={$v} <br />
    {/foreach}
    <hr />
    {*如果没有指定数组下标 可以通过@key得到*}
    {foreach $arr as $v}
    键名={$v@key}--键值={$v} <br />
    {/foreach}
{/if}
当数组没有值时可以使用foreachelse
{foreach $arr1 as $val}
{$val}
{foreachelse}
没有结果
{/foreach}
foreach支持嵌套
{foreach $users as $user}
    {foreach $user as $val}
        {$val} <br />
    {/foreach}
    <hr />
{/foreach}
<hr color=‘red‘/>
<h2>用户列表</h2>
<table border=‘1‘ width=‘80%‘ cellpadding=‘0‘ cellspacing=‘0‘>
    <tr>
        <td>编号</td>
        <td>用户名</td>
        <td>邮箱</td>
        <td>地址</td>
    </tr>
    {foreach $users as $user}
        <tr>
            <td>{$user.id}</td>
            <td>{$user.username}</td>
            <td>{$user.email}</td>
            <td>{$user.addr}</td>
        </tr>
    {foreachelse}
        <tr>
            <td colspan=‘4‘>没有用户</td>
        </tr>
    {/foreach}
</table>
foreach中有一些常用属性
<hr color=‘blue‘/>
<h2>用户列表</h2>
<table border=‘1‘ width=‘80%‘ cellpadding=‘0‘ cellspacing=‘0‘>
    <tr>
        <td>编号</td>
        <td>用户名</td>
        <td>邮箱</td>
        <td>地址</td>
    </tr>
    {foreach $users as $user}
        {if $user@first}
            <tr bgcolor=‘red‘>
        {elseif $user@last}
            <tr bgcolor=‘green‘>
        {elseif $user@index is even}
            <tr bgcolor=‘blue‘>
        {else}
            <tr>
        {/if}
            <td>id={$user.id}--index={$user@index}--iteration={$user@iteration}</td>
            <td>{$user.username}</td>
            <td>{$user.email}</td>
            <td>{$user.addr}</td>
        </tr>
        {/foreach}
        {if $user@show}
            <tr><td colspan=‘4‘>一共{$user@total}个用户</td></tr>
        {else}
            <tr><td colspan=‘4‘>没有用户,请添加</td></tr>
        {/if}
</table>
<hr  color=‘red‘/>
通过break终止循环
{$arr=[‘a‘,‘b‘,‘c‘,‘d‘,‘e‘]}
{foreach $arr as $val}
    {if $val==‘c‘}
        {break}
    {/if}
    {$val}
{/foreach}
通过continue跳过当次循环,进入下次循环
{$arr=[‘a‘,‘b‘,‘c‘,‘d‘,‘e‘]}
{foreach $arr as $val}
    {if $val==‘c‘}
        {continue}
    {/if}
    {$val}
{/foreach}
七:继承
$smarty->display(‘extends:parent.html|child.html‘);
原文:http://www.cnblogs.com/chenjinxinlove/p/5224838.html