模板其實就是php和html的分離,有人也說mvc啥的,php處理程序,把動態內容保存到變量里面,然后通過模板輸出這些變量的內容,這就是模板.你可以
$rows = $db->getAll($sql);require "tpl.html";
來輸出,你也可以:
$tpl->setVar("rows",$rows);$tpl->display("tpl.html");
來輸出,總之他是輸出變量里面的內容,我感覺模板應該有下面的特征:
1,就是html頁面、2,即見即得、3,書寫簡化,容易擴展,這一點非常重要,其實就是換個簡單的書寫形式.
smarty自定義函數還有什么的,還有其他模板也有類似功能,比如{article.addtime:date:Y-m-d} {article.content:nl2br:},如果能做到上面的三點,我感覺就是一個很好的模板,很多人說直接用php來做html模板,我比較反對這種形式
1,php代碼看不到、2,書寫太繁,太麻煩。
如果看起來麻煩,書寫也麻煩,我拿模板來干什么,做花瓶?discuz的模板就是一個不錯的模板,可惜2,3兩點他做得不太好,我自己也做個模板。到現在也一直用,差什么就加什么,對我來說他就是一個好的模板。
1,就是html頁面
2,即見即得,你看到的什么樣子,輸出就是什么樣子。不像很多人去搞個href="$cssPath/css.css"這樣去搞個,div+css的頁面這種模板美工改起來肯定沒少吃苦。
3,書寫簡化:其實就是函數的簡寫。就如上面的,比如發布時間需要格式化可以任意改,比如內容要吧回車變成換行,比如要把內容弄到一個編輯器。{content:htmleditor:},比如。。。。,他就是一個簡寫,這樣做起來什么事情都事倍功半。還記得那個頁面的調用吧?比如最新產品顯示8個,最新。。。顯示10個。(很多所謂的cms采用標簽)
其實說白了就是一個foreach,傳入參數返回一個二維數組,于是就有了
- <!--{loop NewProduct:sortid=1;limit=8 $product}-->
- {product.productname:cut:20} ....
- <!---{/loop}-->
有一天客戶要求變了,要調用精華產品,于是
<!--{loop NewProduct:sortid=1;limit=8 $product}--> 變成了:
<!--{loop NewProduct:sortid=1;digest=1;limit=8 $product}-->
我感覺這就是簡化,美工只要明白,這里應該是循環就行了,到現在和我合作的美工還沒有一個不會改我的模板的,雖然他不懂程序。
4,模板吧,你要追求速度,緩存吧,緩存真的有用嗎?俺為啥要緩存?很多人說設置下緩存時間,html緩存就行了,這個能叫緩存么?如果是動態網頁,上面寫的歡迎你,{username},你還能把他緩存了?你說不緩存吧,下面的調用又太多,咋辦捏?這時候就要用到局部緩存,什么叫局部緩存,就是緩存頁面的也部分,其實說白了也就是那些調用。
<!--{loop NewProduct:sortid=1;limit=8 $product}-->
這種地方的調用,如果首頁顯示20個分類的最新5篇文章,那打開頁面,光這些文章調用就要20次查詢,局部緩存吧:
<!--{#loop NewProduct:sortid=1;limit=8 $product}-->
loop我加一個#就讓他緩存了,我加20個#,首頁的調用就沒數據庫查詢了,好像有的地方必須每次都調用最新的,咋辦呢,把#去掉吧。
模板就是模板,雖然只負責顯示,不一定就不重要,如果讓模板變得簡單倒是我們應該考慮的問題。
新聞熱點
疑難解答