模板引擎
模板引擎:將PHP和HTML分開的一種解決方案;
<?php
mysql_connect("localhost","root","");
mysql_select_db();
$sql="select * from stu";
$result=mysql_query($sql);
echo "<ul>";
while($row=mysql_fetch_assoc())
echo "<li>".$row['title']."</li>";
echo "</ul>";
?>
{@ news typeip='?' lmit=5@}
<div id="news">
{@ news typeip='?' lmit=5@}
</div>
好處:
一、PHP與HTML分開,能夠後期方便的更改模板
二、PHP程序員和美工各司其責,並行開發,提升了開發速度;
壞處:
一、中小型的項目不適合
二、實時更新數據的網站中不適用
流行模板引擎:
smarty smart template phplibphp
smarty:
一、支持編譯和緩存,能夠提升用戶體驗度(頁面加載)
二、smarty模板中有豐富的控制結構
三、smarty中具備豐富的自定義插件
四、PHP編寫模板引擎-能夠學習模板引擎編寫
五、豐富的緩存控制html
smarty的基本使用步驟:
一、smarty.net中下載smarty包
libs->smarty
二、引入smarty
將smarty中代碼引入程序
引入smarty解析類
三、初始化smarty類
$tpl = new Smarty;
2.6:
模板目錄:
$tpl -> template_dir = "./tpl";
編譯目錄:
$tpl -> compile_dir = "./comp";
3.0
模板目錄:
$tpl -> template_dir = "./tpl";
編譯目錄時自動生成的 template_c
四、使用smarty:
調用模板: index.html index.tpl
$tpl -> display("模板文件名");
smarty的基本操做:mysql
【變量】
一、PHP分配給smarty變量
$tpl -> assign("前臺變量名",PHP變量名|數據);
模板中變量輸出:
{$變量名}
防止標籤成對出現:
1)原樣輸出不解析;
{literal}
代碼{}
{/literal}
2)手動修改變量的左右定界符
$tpl -> left_delimiter = "{@ ";
$tpl -> right_delimiter ="@}";
二、smarty模板內定義的局部變量
{@ assign var="" value=""@}
var:定義的模板變量名
value:定義的變量的數據;ios
三、smarty前臺樣式配置變量
四、smarty中session,get等變量使用
【控制結構】
分支控制結構:
{@ if 條件1@}
操做1
{@ else if 條件2@}
操做2
{@ else@}
操做3
{@ /if@}
注意:
比較運算符
> gt
< lt
== eq
>= gte
<= lte
=1 瀏覽權限
=2 修改和刪除
=3 增長權限
其餘 你沒有權限
循環結構】
foreach: 幾維數組,幾回循環
格式:
{@ foreach name="" item="" key="" from=""@}
{@ /foreach@}
name:循環體名字
item:被遍歷出得數組元素
key:數組元素的鍵名或者是索引值
from:被遍歷的數組
關聯數組元素:
$item.鍵名
section:能夠省掉一次循環,而且能夠對記錄進行二次記錄篩選;
格式:
{@ section name="" loop="" start="" step="" max="" show=""@}
{@ /section@}程序員
name:循環體的名字,能夠當作下標使用,可是不是下標
loop:被遍歷的數組名字
start:被遍歷的數組的起始記錄 索引從0開始
正值:從頭至尾的去找起始記錄
負值:從尾到頭的去找起始記錄sql
step:步長
正值:從頭至尾的取得記錄
負值:從尾到頭的取得記錄
eg:
start=-1 step=-1 將記錄進行倒序排列數據庫
max:循環次數,被遍歷的數組記錄條數
show:被遍歷出得數據是否顯示
true:顯示數據
false:不顯示數據
【文件引入】
一、靜態模板文件引入
{@ include file="路徑+文件名"@}
路徑計算是以當前的模板頁面計算的
另外:
{@ *註釋內容*@}
二、動態PHP頁面引入
{@ include_php file="路徑+名字"@}
路徑計算是以調用該模板的PHP頁面來計算的api
或者
{@ php@}
echo "你好";
{@ /php@}數組
3.1 初始化的對象必須是smartyBC
$tpl -> allow_php_templates=true
3.0 $tpl -> allow_php_tag=true;
2.6 直接使用
三、前臺樣式配置文件引入:配置的是前臺顯示的某些數據和樣式
{@ config_load file="" section=""@}
section:模塊名
【前臺樣式配置】
注意文件後綴名:
.conf
語法格式:
變量名=值
變量2=值
.......
路徑計算以該前臺樣式的模板文件計算的;
變量:
{@ #變量名#@}緩存
{@ $smarty.config.變量名@}
模塊定義:模塊區域:從定義的位置開始直到下個模塊定義或者是頁面結束
[模塊名]
變量=值
[模塊名]
【系統定義的標籤】
一、單選按鈕組
{@ html_radios name="" output="" values="" checked="" separator=""@}
name:單選按鈕的名字
output:顯示的數據內容組成的一維索引數組
values: 每一個單選按鈕value值組成的一維的索引數組
checked:被選中按鈕的value值
separator:按鈕組的樣式
options:以value當鍵名,以顯示數據當元素值,組成的關聯數組;
二、複選框按鈕組
{@ html_checkboxes name="" output="" values="" checked="" separator=""@}
checked:能夠是單個數值也能夠是被選中的按鈕value組成的一維索引數組
三、下拉列表框
{@ html_options name="" output="" values="" selected=""@}
checked改爲selected
四、時間插件
{@ html_select_time@}
五、日期插件
{@ html_selecte_date start_year="" end_year=""@}
start_year:起始的年份
end_year:終止的年份
六、html_p_w_picpath
七、html_table
【修飾函數】對傳遞到前臺的數據進行二次修改
使用格式:
{@ 變量名|函數名:參數1:參數2[|函數名:參數1:參數2]@}
capitalize:首字母大寫
date_format:設置日期格式
truncate:截取字符串
count_characters:統計字符個數
default:設置默認值
indent:縮進
lower:將字符轉換爲小寫
strip_tags:去掉HTML標籤
upper:將字符轉換爲大寫
replace:字符串替換
【session|cookie|get|post】
$smarty.session.變量名
$smarty.cookie.變量名
$smarty.get.變量名
$smarty.post.變量名
【用戶自定義插件】
plugins:用戶自定義插件目錄
sysplugins:系統插件目錄
1】修飾函數插件:
文件名:modifier.插件名.php
函數名:
function smarty_modifier_插件名($string,參數1,參數2,參數3...){
}
$string:所要修飾的數據是什麼
參數:使用該插件時,冒號後面的參數
修飾數據能夠return 也能夠是echo出得;
eg:
modifier.color.php
function smarty_modifier_color($string,$color){
return "<font color='".$color."'>".$string."</font>";
}
2】塊狀插件:就好像literal標籤類型似的插件
{@ 標籤名 參數1=值1 參數2=值2 參數3=值3......@}
{@ /標籤名@}
文件名:block.插件名.php
函數名:
function smarty_block_插件名($params, $content, $template, &$repeat){
}
$params:將參數名當作鍵名,用參數值做爲數組元素值,組成的關聯數組
$content:標籤中的數據內容
$template:smarty對象
3】function類型插件:好像html_radios html_select_time
文件名:
function.插件名.php
函數名:
function smarty_function_插件名($params, $template){
}
$params:將參數名當作鍵名,用參數值做爲數組元素值,組成的關聯數組
$template:smarty對象
顯示數據:
1)直接輸出:操做輕鬆
2)assign傳遞前臺:能夠自由的控制樣式
【簡易的緩存控制】
緩存目錄
$tpl -> cache_dir = "./cache";
緩存時間:時間超事後回從新的生成緩存
$tpl -> cache_life_tim=60
打開緩存:
$tpl -> caching = true;
false:就是關閉緩存
display("index.tpl",20111199)
第二個參數是緩存文件快速識別的ID編號
clearallcache():清除緩存目錄下得全部的緩存文件
clearcache("那個緩存文件"):清除那個緩存文件
iscached():判斷緩存是否已經存在
plugins插件中的全部插件在默認狀況下,所有是會生成緩存的
regist_block("前臺標籤名","PHP函數名",true|false);
1)在當前PHP頁面中定義一個函數
2)將函數註冊成插件
3)true|false:控制是否緩存的;
regist_function("前臺標籤名","PHP函數名",true|false);
【靜態HTML頁面的生成和原理】
爲了提升SEO優化和頁面加載速度
僞靜態
方法:
1)字符串替換,文件操做
2)使用輸出流:輸出到終端的數據流
5 4 3 2 1
ob_start():打開輸出流緩衝池
ob_get_contents():從緩衝池中取得數據
ob_clear():清除緩衝池
3)使用smarty內置函數 fetch(模板文件名[,緩存編號]) 若是沒有緩存文件,fetch去編譯目錄下找編譯文件生成html代碼 若是有緩存,fetch自動的加載緩存後的文件 返回的模板文件被編譯後生成的HTML代碼; 時間: 1)手動生成:後臺設置功能按鈕 2)自動生成: 即時生成靜態HTML頁面 根據時間設置生成HTML【多國語言網站】 1)風格設計 風格徹底不一樣,設計兩套 調用模板頁面使用session固定風格 風格同樣,內容不同,那麼使用語言包使用 2)數據庫設計 1]數據庫級別:浪費磁盤空間 數據量較大時,推薦使用 數據庫名 ch_gccms en_gccms 2]表級別:如今比較實用一種方式,檢索速度不影響,磁盤浪費不嚴重 表名: ch_news en_news 3]字段級別:檢索速度較慢 不浪費磁盤空間 news id ch_title en_title ch_content en_content 3)程序設計 使用session保存語言類型,而後根據session語言類型調去不一樣語言的數據內容和模板風格 爲了應付客戶端每一個人的選擇,可使用cookie保存用戶數據.【單入口程序中引入smarty】 1)使用smarty目錄替換掉原來的gctemplate; 2)將smarty的配置文件引入到單入口的配置文件中 3)將將smarty的初始化信息,放入到model.class.php頁面 4)3.0之後,將common.inc.php中的autoload和smarty中的autoload合併; 注意:將model.class.php中display內的模板文件後綴改掉;