《PHP教程:Smarty3配置及入門語(yǔ)法》要點(diǎn):
本文介紹了PHP教程:Smarty3配置及入門語(yǔ)法,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
一.Smarty3配置PHP學(xué)習(xí)
下載Smarty文件PHP學(xué)習(xí)
在Smarty的官方網(wǎng)站下載Smarty文件,解壓下載到的Smarty文件,Smarty的庫(kù)文件就在libs文件夾中.PHP學(xué)習(xí)
我使用的PHP調(diào)試環(huán)境的程序集成包是phpstudy,默認(rèn)在D盤會(huì)有一個(gè)WWW的文件夾,在WWW文件夾中創(chuàng)建一個(gè)testSmarty的文件夾,testSmarty文件夾就是本次練習(xí)Smarty的項(xiàng)目根目錄.在testSmarty中創(chuàng)建一個(gè)smarty的文件夾,并將libs中的文件復(fù)制到這個(gè)smarty文件夾中.目錄結(jié)構(gòu)如下:PHP學(xué)習(xí)
PHP學(xué)習(xí)
Smarty配置PHP學(xué)習(xí)
在testSmarty文件夾中創(chuàng)建一個(gè)test文件夾,在這個(gè)文件夾中創(chuàng)建一個(gè)config.php文件,內(nèi)容如下:PHP學(xué)習(xí)
<?php header("content-type:text/html;charset=utf-8"); //引入核心文件并實(shí)例化 require ('/WWW/testSmarty/smarty/Smarty.class.php'); $smarty = new Smarty(); //配置 //模板文件的路徑 $smarty->template_dir = '/WWW/testSmarty/test/tpl'; //模板文件編譯后得到的文件的路徑 $smarty->compile_dir = '/WWW/testSmarty/test/template_c'; //緩沖文件的路徑 $smarty->cache_dir = '/WWW/testSmarty/test/cache'; //開啟緩沖,緩沖默認(rèn)是關(guān)閉的 $smarty->caching = true; //緩沖的保留時(shí)間 $smarty->cache_lifetime = 120; ?>
在設(shè)置路徑的時(shí)候我使用的是絕對(duì)路徑,也能使用相對(duì)路徑.依據(jù)設(shè)置的路徑,還要在test文件夾中創(chuàng)建tpl,template_c和cache文件夾.PHP學(xué)習(xí)
目錄如下:PHP學(xué)習(xí)
PHP學(xué)習(xí)
檢驗(yàn)smarty是否配置成功:PHP學(xué)習(xí)
在test文件夾下創(chuàng)建一個(gè)start.php文件,文件內(nèi)容如下:PHP學(xué)習(xí)
<?php //引入配置文件 require ('config.php'); //向模板文件中傳遞值 $smarty->assign('text','hello Smarty'); //渲染模板 $smarty->display('start.tpl'); ?>
在tpl文件中創(chuàng)建一個(gè)start.tpl文件,內(nèi)容如下:PHP學(xué)習(xí)
{$text}
PHP學(xué)習(xí)
模板文件的后綴并不是非得是tplPHP學(xué)習(xí)
在瀏覽器中輸入localhost:800/testSmarty/test/start.phpPHP學(xué)習(xí)
注意:在我這兒Apache是800端口PHP學(xué)習(xí)
如果瀏覽器中能夠顯示出hello Smarty,則說(shuō)明Smarty配置成功.PHP學(xué)習(xí)
二.入門語(yǔ)法PHP學(xué)習(xí)
界定符PHP學(xué)習(xí)
Smarty的標(biāo)簽是位于界定符之間,默認(rèn)界定符是{和},界定符是可以改變的.在配置文件中對(duì)界定符進(jìn)行修改,如下:PHP學(xué)習(xí)
//將左界定符改為#PHP學(xué)習(xí)
$smarty->left_delimiter = '#';
//將右界定符改為#
$smarty->right_delimiter = '#';PHP學(xué)習(xí)
當(dāng)Smarty讀取到界定符之間的內(nèi)容會(huì)試圖解析它,并輸出結(jié)果.在界定符之外的內(nèi)容都是靜態(tài).PHP學(xué)習(xí)
注釋PHP學(xué)習(xí)
注釋是以*開頭*結(jié)尾的,外面包著界定符,如下:PHP學(xué)習(xí)
{* 這兒是注釋 *}PHP學(xué)習(xí)
輸出變量PHP學(xué)習(xí)
//向要渲染的模板傳遞值 $smarty->assign('變量名',值)
傳遞的值可以是字符串,數(shù)組也能是對(duì)象.PHP學(xué)習(xí)
當(dāng)變量是字符串時(shí),{$變量名}表示輸出變量.PHP學(xué)習(xí)
當(dāng)變量是數(shù)組時(shí),輸出變量的方式有兩種,分別為:PHP學(xué)習(xí)
a.{$arr.key}PHP學(xué)習(xí)
b.{$arr['key']}PHP學(xué)習(xí)
當(dāng)是一個(gè)對(duì)象時(shí),可以直接通過(guò)obj->method(),調(diào)用對(duì)象的方法PHP學(xué)習(xí)
條件判斷PHP學(xué)習(xí)
條件判斷的基本句式如下:PHP學(xué)習(xí)
{if $variable 條件修飾符 value1} //some {elseif $variable 條件修飾符 value2} //some {else} //some {/if}
基本的條件修飾符有:eq(等于),neq(不等于),gt(大于),lt(小于),lte(小于等于),gte(大于等于).修飾符前后要有空格PHP學(xué)習(xí)
循環(huán)PHP學(xué)習(xí)
Smarty中有兩種循環(huán),分別是foreach,section,for和whilePHP學(xué)習(xí)
section循環(huán)PHP學(xué)習(xí)
section不能循環(huán)遍歷關(guān)聯(lián)數(shù)組,它只能循環(huán)遍歷連續(xù)數(shù)字下標(biāo)的數(shù)組,如果要循環(huán)關(guān)聯(lián)數(shù)組使用foreachPHP學(xué)習(xí)
section可以接受name,loop,step,start,max,show,其中name和loop是必須的.name是每一次循環(huán)得到的下標(biāo),loop是循環(huán)的值,step循環(huán)的步長(zhǎng),默認(rèn)為1,max是最大循環(huán)的次數(shù),start開始循環(huán)的下標(biāo),默認(rèn)為0,如果start為負(fù)數(shù),就從數(shù)組末尾開始循環(huán),show表示是否顯示循環(huán)的內(nèi)容,默認(rèn)是truePHP學(xué)習(xí)
如下:PHP學(xué)習(xí)
在test文件夾下創(chuàng)建section.php文件,內(nèi)容如下:PHP學(xué)習(xí)
<?php require ('config.php'); $article = array( array( 'title'=>'第一章', 'name'=>'QxQstar', 'content'=>'Smarty section循環(huán)第一章' ), array( 'title'=>'第二章', 'name'=>'QxQstar', 'content'=>'Smarty section循環(huán)第二章' ) ); $smarty->assign('article',$article); $smarty->display('section.tpl'); ?>
在tpl文件夾下創(chuàng)建section.tpl文件,內(nèi)容如下:PHP學(xué)習(xí)
<ul> {section name=item loop=$article} <li> {$article[item].title} <p>作者:{$article[item].name}</p> <p>內(nèi)容:{$article[item].content}</p> </li> {sectionelse} 沒(méi)有文章 {/section} </ul>
foreach循環(huán)PHP學(xué)習(xí)
foreach循環(huán)比section循環(huán)要簡(jiǎn)單,foreach的語(yǔ)法與php中foreach的語(yǔ)法很像,foreach可以做到任何section做到的功能,并且foreach更簡(jiǎn)單PHP學(xué)習(xí)
{foreach $arrayvar as $itemvar} {foreach $arrayvar as $keyvar=>$itemvar}
例子如下:PHP學(xué)習(xí)
在test文件夾中創(chuàng)建foreach.php文件,文件內(nèi)容如下:PHP學(xué)習(xí)
<?php require ('config.php'); $articles = array( array( 'title'=>'第一章', 'name'=>'QxQstar', 'content'=>'Smarty foreach循環(huán)第一章' ), array( 'title'=>'第二章', 'name'=>'QxQstar', 'content'=>'Smarty foreach循環(huán)第二章' ) ); $smarty->assign('articles',$articles); $smarty->display('foreach.tpl'); ?>
在tpl文件夾中創(chuàng)建foreach.tpl文件,內(nèi)容如下:PHP學(xué)習(xí)
<ul> {foreach $articles as $article} <li> {$article.title} <p>{$article.name}</p> <p>{$article.content}</p> </li> {foreachelse} <p>沒(méi)有文章</p> {/foreach} </ul>
for循環(huán)PHP學(xué)習(xí)
for循環(huán)用于創(chuàng)建一個(gè)簡(jiǎn)單的循環(huán),語(yǔ)法如下:PHP學(xué)習(xí)
{for $variable = $startValue to $entValue step $step}
PHP學(xué)習(xí)
{for $i = 0 to 10 step 2} {$i} {foreach} 不能進(jìn)行循環(huán) {/for}
step可以不指定,默認(rèn)循環(huán)的步長(zhǎng)是1.for還可以指定一個(gè)max屬性,max屬性用于指定循環(huán)的次數(shù)PHP學(xué)習(xí)
與foreach循環(huán)類似,for循環(huán)也有一個(gè)forelse.{forelse}在循環(huán)不能遍歷的時(shí)候執(zhí)行PHP學(xué)習(xí)
while循環(huán)PHP學(xué)習(xí)
Smarty的while循環(huán)與php中的while循環(huán)類似,語(yǔ)法如下:PHP學(xué)習(xí)
{while $variable > 0} //some {/while}
在循環(huán)中使用{break}可以停止循環(huán),{continue}退出當(dāng)前循環(huán)進(jìn)入下一次循環(huán)PHP學(xué)習(xí)
插件PHP學(xué)習(xí)
Smarty插件的實(shí)質(zhì)是函數(shù),插件的類型有三種,分別是function插件,modifier插件(變量調(diào)節(jié)插件),block插件PHP學(xué)習(xí)
使用插件PHP學(xué)習(xí)
function插件的使用:{funcName param1 = value...}PHP學(xué)習(xí)
modifier插件的使用:{$variable | modifierName:param1...}PHP學(xué)習(xí)
block插件的使用:PHP學(xué)習(xí)
{blockName param1 = value...} {$content} {/blockName}
如:PHP學(xué)習(xí)
//function插件的使用 {include file='header.tpl'} //modifier插件的使用 {'abc'|cat:'d'} //block插件的使用 {textformat wrap = 10} abc def ghikj lmn {/textformat}
制作插件PHP學(xué)習(xí)
制作插件的方式有三種PHP學(xué)習(xí)
1.使用registerPlugin函數(shù)注冊(cè)寫好的自定義函數(shù)PHP學(xué)習(xí)
2.將寫好的插件放在smarty目錄中的Plugins目錄里PHP學(xué)習(xí)
3.PHP內(nèi)置函數(shù)可以自動(dòng)的以修飾插件(變量調(diào)節(jié)插件)的形式在模板中使用PHP學(xué)習(xí)
使用registerPlugin函數(shù)注冊(cè)自定義插件,例子如下PHP學(xué)習(xí)
在test文件夾下創(chuàng)建defineFunc.php文件,內(nèi)容如下:PHP學(xué)習(xí)
<?php require ('config.php'); function test($params){ $p1 = $params['p1']; $p2 = $params['p2']; return $p1.$p2; } $smarty->registerPlugin('function','f_test','test'); $smarty->display('definedFunc.tpl'); ?>
在tpl文件夾下創(chuàng)建一個(gè)defineFunc.tpl文件,內(nèi)容如下:PHP學(xué)習(xí)
{f_test p1='learn' p2=' Smarty'}
PHP學(xué)習(xí)
registerPlugin函數(shù)的第一個(gè)參數(shù)說(shuō)明注冊(cè)的這段程序的類型,在這里是function說(shuō)明注冊(cè)的是一個(gè)function插件,還可以取得值有block和modifier,第二個(gè)參數(shù)指注冊(cè)的Smarty function插件名,第三個(gè)參數(shù)指自定義函數(shù)名,第二個(gè)參數(shù)和第三個(gè)參數(shù)可以相同.PHP學(xué)習(xí)
在Smarty中當(dāng)執(zhí)行到{f_test p1='learn' p2=' Smarty'}時(shí),p1和p2會(huì)被打包成一個(gè)數(shù)組傳遞到我們定義的test函數(shù)中去.PHP學(xué)習(xí)
通過(guò)網(wǎng)Plugins文件夾中添加文件的方式制作插件PHP學(xué)習(xí)
1.制作function插件PHP學(xué)習(xí)
在Plugins文件夾下創(chuàng)建一個(gè)function.test.php文件(function表示這個(gè)一個(gè)function插件,test表示插件名),內(nèi)容如下:PHP學(xué)習(xí)
function smarty_function_test($params){ //$params是一個(gè)關(guān)聯(lián)數(shù)組 $w = $params['w']; $h = $params['h']; return $w * $h; } ?>
在模板中直接使用test function插件PHP學(xué)習(xí)
{test h = 3 w = 5}
PHP學(xué)習(xí)
這兩個(gè)參數(shù)會(huì)被打包成一個(gè)數(shù)組傳遞到smarty_function_test函數(shù)中PHP學(xué)習(xí)
2.制作modifier插件PHP學(xué)習(xí)
在Plugins文件夾下創(chuàng)建一個(gè)modifier.test2.php文件(modifier表示這個(gè)一個(gè)modifier插件,test2表示插件名),內(nèi)容如下:PHP學(xué)習(xí)
function smarty_modifier_test2($utime,$formate){ return date($formate,$utime); }
在模板中使用test2 modifier插件PHP學(xué)習(xí)
{$time|test2:'Y-m-d H-i-s'}
PHP學(xué)習(xí)
定義modifier插件和function插件有所不同,function插件的自定義函數(shù)只接收一個(gè)數(shù)組參數(shù),modifier插件的自定義函數(shù)PHP學(xué)習(xí)
將接收到的參數(shù)一一列舉出來(lái)PHP學(xué)習(xí)
3.制作block插件PHP學(xué)習(xí)
在Plugins文件夾下創(chuàng)建一個(gè)block.test3.php文件(block表示這個(gè)一個(gè)block插件,test3表示插件名),內(nèi)容如下:PHP學(xué)習(xí)
function smarty_block_test3($params ,$content){ $replace = $params['replace']; $maxnum = $params['maxnum']; if($replace == 'true'){ str_replace(',', ',', $content); str_replace('.', '.', $content); } $content = substr($content,0,$maxnum); return $content; }
在模板中使用test3 block插件PHP學(xué)習(xí)
{test3 replace='true' maxnum = 6} abcdfedddderere {/test3}
{test3}{/test3}之間的內(nèi)容傳遞到smarty_block_test3中的第二個(gè)參數(shù)中,test3后跟著的參數(shù)打包成一個(gè)數(shù)組傳遞到smarty_block_test3中的第一個(gè)參數(shù)中.PHP學(xué)習(xí)
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持維易PHP!PHP學(xué)習(xí)
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/1705.html