MVC是一種開發模式,強調數據的輸入、處理、顯示是強制分離的
Smarty使用教程1.如何配置我們的smarty解壓后把libs文件夾放在網站第一級目錄下,然后創建兩個文件夾templates 存放模板文件templates_c 存放編譯后的文件再創建初始化文件smarty.ini.php
注意事項:1.替換變量的標識分隔符一般使用<{}>改動分隔符的兩個方法:1.改源碼:Smarty.class.php $left_delimiter 不推薦2.動態修改:$Smarty->left_delimiter="<{";$Smarty->right_delimiter="}>";寫在display之前
2.smarty分配數據$smarty->assign("Address",$address);用來賦值到模板中。可以指定一對 名稱/數值,也可以指定包含 名稱/數值 的聯合數組。$smarty->assign("aa",true); //輸出1 $smarty->assign("aa",false); //輸出空注意:二維關聯數組的分配 <{$arr.num.email}>對象的分配 <{$dog1->name}>對象的對象的屬性 公開的 <{$dog1->master->name}>從配置文件中取出數據 常見配置樣式等先加載配置文件<{config_load file="../configs/foo.conf"}>配置文件中的數據可直接在模板文件中使用<{#Bgcolor#}>
3.smarty模板的內建函數foreach一維數組循環取出<{foreach form=$arr item=temp key=k}><{$k}>=<{$temp}><{/foreach}>二維索引數組循環取出<{foreach form=$arr item=temp key=k}><{foreach form=$temp item=val}><{$val}><{/foreach}><{/foreach}>二維關聯數組循環取出<{foreach form=$arr item=item1}><{foreach form=$item1 item=item2 key=k}><{$k}>=<{$item2}><{/foreach}><{/foreach}>
4.自定義函數function test($args){$str="";for($i=0;$i<$args['times'];$i++){$str.="<br/><font color='".$args['color']."'>" size='".$args['size']."'>".$args['con']."</font>";}return $str;}//需注冊函數$smarty->register_function("self","test");調用形式<{self times="4" size="5" con="hello" color="red"}>
自定義函數(塊注冊方式)function test2($args,$con){$str="";for($i=0;$i<$args['times'];$i++){$str.="<br/><font color='".$args['color']."'>" size='".$args['size']."'>".$con."</font>";}return $str;}//注冊塊函數$smarty->register_block("block","test2");調用形式<{block times="4" size="5" color="red"}>hello<{/block}>
以插件的形式增加自定義函數(放在libs/plugins文件夾中)必須遵守文件名格式:function.自定義函數名.php函數名格式:function smarty_function_自定義函數名($params,&$smarty){$str="";for($i=0;$i<$args['times'];$i++){$str.="<br/><font color='".$args['color']."'>" size='".$args['size']."'>".$args['con']."</font>";}return $str;}//無需注冊
以插件的形式增加自定義塊函數必須遵守文件名格式:function.自定義函數塊名.php函數名格式:function smarty_block_自定義函數塊名($params,$con,&$smarty){$str="";for($i=0;$i<$args['times'];$i++){$str.="<br/><font color='".$args['color']."'>" size='".$args['size']."'>".$con."</font>";}return $str;}//無需注冊
5.smarty基本語法在模板中使用注釋<{*注釋內容*}>在模板文件中調用函數<{函數名 屬性1="屬性值" 屬性2="屬性值"……}>在模板文件對引用的變量可以進行數學運算,但不能用()來改變運算次序分配常量并取出define("RATE","0.08");<{$samrty.conts.RATE}>在模板中使用變量調節器基本用法<{變量/函數/字符串|變量調節器名稱:參數1:參數2}>變量調節器可以自定義,以插件的形式給出文件名:modifier.變量名稱.phpfunction smarty_modifier_XXX(){//代碼}//新建一個變量調節器 要求句子首字母大寫其他小寫文件名:modifier.變量名稱.phpfunction smarty_modifier_mycapitalize(){return strtoupper(substr($string,0,1)).strtolower(substr($string,1));}常用的變量操作符date_formate 時間格式escape 轉碼nl2br 換行符替換為<br/>regex_replace 正則替換string_formate 字符串格式化truncate 截取
6.samrty其他內建函數capture 捕獲config_load 從配置文件中加載變量include 在當前模板中包含其他模板insert 類似于include,但所包含的內容不會被緩存if elseif elseldelim rdelim 左右邊界符count 計數literal 標簽內數據當文本處理phpsection sectionelse
7.自定義函數counter 保存了每次記數時的當前記數值. 用戶可以通過調節 interval 和 direction 調節該值. 也可以決定是否輸出該值. 如果需要同時運行多個計數器,必須為它們指定不同的名稱. 如果沒有指定名稱,模板引擎使用 "default" 作為缺省值.cycle用于輪轉使用一組值. 該特性使得在表格中交替輸出顏色或輪轉使用數組中的值變得很容易.html_checkboxes根據給定的數據創建復選按鈕組. 該函數可以指定哪些元素被選定. 要么必須指定 values 和 ouput 屬性,要么指定 options 替代. 所有的輸出與 XHTML 兼容.html_options根據給定的數據創建選項組. 該函數可以指定哪些元素被選定. 要么必須指定 values 和 ouput 屬性,要么指定 options 替代.html_radios根據給定的數據創建單選按鈕組. 該函數可以指定哪個元素被選定. 要么必須指定 values 和 ouput 屬性,要么指定 options 替代. 所有的輸出與 XHTML 兼容.html_select_date用于創建日期下拉菜單,可以顯示任意年月日.html_select_time用于創建時間下拉菜單mailto用于創建日期下拉菜單popup-init,popuppopup 用于創建javascript彈出窗口. 需要映入overLib.jstextformat用于格式化文本
8.變量(重點使用)$config_dir $template_dir$compile_dir$plugins_dir$caching$cache_dir$cache_lifetime$debugging啟動調試控制臺
9.smarty的緩存機制默認是當模板文件有改動時,控制器會判斷1.模板編譯文件是否存在2.模板文件改動時間是否大于編譯文件改動時間結果為true時才會重新生成編譯文件,從而對頁面重新渲染缺點:1.生成的編譯文件是PHP動態數據文件,影響瀏覽器讀取性能2.當控制器文件發生變化時,編譯文件不會重新生成修改后:1.生成的編譯文件是HTML靜態數據文件,利于瀏覽器讀取2.當控制器文件發生變化時,通過設置的cache_lifetime來控制重新生成編譯文件
局部緩存技術一個模板文件一部分緩存,一部分實時更新insert函數默認是不緩存
//根據ID號來生成不同的緩存頁面$smarty->display('模板文件',緩存ID)$smarty->clear_all_cache(int expire time);//清除所有緩存作為可選參數“expire time”,你可以指定一個以秒為單位的最小時間,超過這個時間的緩存都將被清除掉$smarty->clear_cache('模板文件',緩存ID);//清除指定id的緩存文件
append 以值傳遞,有拷貝的過程append_by_ref 引用添加assign默認是值傳遞的assign_by_ref是引用傳遞
10.smarty過濾器PRefilters預過濾器在控制器讀取模板文件之前運行,函數封裝在display函數中所用是刪除不需要的內容,監視對模板進行的操作Postfilters后過濾器 可以用開添加注釋版本號在控制器輸出編譯文件之前運行Outputfilters輸出濾鏡編譯文件被瀏覽器讀取之前執行
新聞熱點
疑難解答