smarty模板引擎基礎知識整理


  模板引擎
模板引擎:將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內的模板文件後綴改掉;

相關文章
相關標籤/搜索