說道框架(framework)那麼必須要提到smarty模板,在面試時你可以不會任何的框架,但是如果不會smarty模板,那麼面試官會認爲你在說謊,因爲幾乎所有的框架都是基於或借鑑smarty。
一、smarty模板介紹
基於面向對象編程思想封裝的類,實現前後臺代碼分離,降低耦合度,並且爲後續的分工合作開發做準備。Smarty(輕量,微小)是編譯性模板框架,體積小、速度快,支持緩存、全局站點配置等功能,是“旅行居家”開發必備神器!
二、使用步驟
1、在官網www.smarty.net 下載最新版,解壓,複製libs文件夾到項目目錄;
2、在對應的項目目錄下創建4個文件夾分別爲模板文件夾(保存前臺頁面,必須,一般命名爲templates)、編譯(自動整理前後臺頁面,從第二次訪問開始不需要重新重新整合,一般命名爲templates_c,compile必須)、配置文件夾(應用於整個站點的配置)、緩存文件夾
3、測試
新建一個後臺頁面index.php
<?php
//引入核心類庫文件
include_once('libs/Smarty.class.php');
//實例化類
$smarty=new Smarty();
//定義配置
//用戶訪問的後臺頁面所有的路徑都是應該以訪問後臺頁面作爲參照物!!!
$smarty->setTemplateDir('templates');//定義模板路徑
//定義編譯路徑
$smarty->setCompileDir('templates_c');
//定義配置文件路徑
$smarty->setConfigDir('config');
//定義緩存路徑
$smarty->setCacheDir('cache');
//修改默認定界符避免和JS衝突!!!
$smarty->left_delimiter='<{';
$smarty->right_delimiter='}>';
新版本:
$smarty->setLeftDelimiter('<{');//指定左定界符,避免和JS衝突
$smarty->setRightDelimiter('}>');
$test='我是test變量';
$smarty->assign("test",$test);//建議註冊的變量名和鍵保持一致
//註冊一個索引數組
$smarty->assign("arr1",array('a','b','c'));
//註冊一個引用數組,section無法用於引用數組
$smarty->assign("arr2",array("a"=>1,"b"=>2,"c"=>3));
//開啓調測
//$smarty->debugging=true;
//自動整理前後臺頁面
$smarty->display('index.tpl');
$smarty->assign('test1','test1');//這個變量無法使用,想一想爲什麼?
?>
在templates文件加新建index.tpl文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>
<body>
我是網站根目錄下index.php的前臺index.tpl頁面<br />
輸出後臺變量test的值:<font color="red" style="font-weight:bold;"><{$test}></font>XXXX<br />
該變量無法輸出:<{$test1}><br />
遍歷輸出索引數組:
<{section name=i loop=$arr1}>
索引:<{$smarty.section.i.index}>值:<{$arr1[i]}>
<{sectionelse}>
沒有符合的記錄
<{/section}>
<br />
遍歷引用數組(用foeach,foreach也可以用於索引數組):
<{foreach from=$arr2 item=v key=k}>
鍵:<{$k}>值:<{$v}>
<{foreachelse}>
沒有符合的記錄集
<{/foreach}>
<br />
新版本寫法:
<{foreach $arr2 as $k=>$v}>
鍵:<{$k}>值:<{$v}>
<{/foreach}>
</body>
</html>
訪問後臺頁面!!!!!測試結果
三、變量解析
後臺註冊,語法 $smarty對象->assign(‘鍵’,mixed 值);
前臺在需要的位置顯示,語法 {$鍵}
四、開啓調測
$smarty->debugging=true;
五、編譯原理
smarty模板調用display函數自動整合前後臺頁面,是從templates文件夾下查找前臺地址自動把訪問的後臺php頁面和該前臺頁面替換成內嵌PHP代碼,生成編譯文件,文件名XXX.前臺模板名.tpl.php,第二次訪問自動把這個頁面相應給用戶,加快速度,只要PHP後臺代碼不改變,這個編譯頁面就不會再次生成。