php基础复习(一)smarty模板

一。基本配置
第一步:下载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');

posted @ 2016-02-28 15:26  快乐~  阅读(423)  评论(0编辑  收藏  举报