熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

php Smarty 模板使用方法詳解

2013-11-15 12:36:16  來源: PHP編程 

  一模板中的注釋

  
每一個Smarty模板文件都是通過Web前台語言(xhtmlcss和javascript等)結合Smarty引擎的語法開發的

  
 用到的web前台開發的語言和原來的完全一樣注釋也沒有變化

  
      Smarty注釋語法是左結束符變量值**右結束符變量值在這兩個定界符之間的內容都是注釋內容可以包含一行或多行並且用戶浏覽網頁查看原代碼時不會看到注釋它只是模板內在的注釋以下是注釋小例子

  
    $smarty>left_lelimiter = <{;

  $smarty>right_delimiter = }>;

  注釋<{* this a note *}>

    代碼如下 復制代碼

  $smarty>left_lelimiter = <{;

  $smarty>right_delimiter = }>;

  注釋<{* this a note *}>   

  二模板中變量聲明

  
      在Smarty中一切以變量為主所有的呈現邏輯都讓模板自行控制

  
      有幾種不同類型的變量變量的類型取決於它的前綴是什麼符號或者被什麼符號包圍

  
      變量可以直接被輸出或者作業函數屬性和修飾符的參數或者用於內部的條件表達式等

  
      <{$name}> <{*常規類型變量需要調用模板內的assign函數分配值*}>

  
      <{$contacts[row]phone}> <{*數組類型變量需要調用模板內的assign函數分配值*}>

  
      <body bgcolor="<{#bgcolor#}>"> <{*從配置文件中讀取的變量的值並輸出*}>

  
     如果在Smarty模板中輸出從php中分配的變量需要在變量前面加$符號並用定界符將它括起來命名方式和php的變量命名方式一樣並且定界標示符號又有點像是php中的<?php ?>(事實上它們確實會被替換成這個)

  
模板中輸出從php分配的變量

  
     在Smarty模板中經常使用的變量有兩種一是從php中分配的變量另一種是從配置文件中讀取的變量

  
     注意模板中只能輸出從php中分配的變量不能在模板中為這些變量重新賦值變量都是全域的只要分配一次就可以了如果分配兩次以上的話變量內容會以最後分配的為主

  
     Smarty中提供的foreach或section語句用於遍歷輸出數組中的每個元素索引數組和關聯數組在模板中輸出的方式略有不同索引數組在模板中的訪問方式和在php腳本中的引用是一樣的關聯數組中元素在模板中指定的方式是使用訪問的

  在模板中訪問對象和php腳本中的方式一樣都是通過>這個運算符完成的

  
Smarty 模板中變量的數學計算

  在模板中變量不能直接賦值但可以參與數學運算只要在php腳本中可以執行的數學運算都可以在模板中應用如下所示

  <{$foo + }> <{* 變量加 *}>

  
     <{$foo * $bar}> <{* 兩個變量相乘 *}>

  
     <{$foo>bar $bar[] * $foo>bar * }> <{* 復合類型變量參加運算 *}>

  
     <{if($foo + == )}> <{* 數學運算在程序邏輯中應用 *}>

    代碼如下 復制代碼

  <{$foo + }> <{* 變量加 *}>

  
     <{$foo * $bar}> <{* 兩個變量相乘 *}>

  
     <{$foo>bar $bar[] * $foo>bar * }> <{* 復合類型變量參加運算 *}>

  
     <{if($foo + == )}> <{* 數學運算在程序邏輯中應用 *}>

  
     在Smarty模板中可以識別嵌入在雙引號中的變量但有的變量必須用反引號`(此符號和~在同一個鍵上)包住如下所示

    代碼如下 復制代碼

  
     <{"test $foo test"}> <{* 雙引號中使用變量 *}>

  
     <{"test `$foo[]` test"}> <{* 雙引號中反引號包住的數組變量 *}>

  
     <{"test `$foobar` test"}> <{* 雙引號中反引號包住的對象成員變量 *}>

  
 

<{"test $foo test"}> <{* 雙引號中使用變量 *}>

  
     <{"test `$foo[]` test"}> <{* 雙引號中反引號包住的數組變量 *}>

  
     <{"test `$foobar` test"}> <{* 雙引號中反引號包住的對象成員變量 *}>

  第加載Smarty模板引擎require libs/Smartyclassphp

  
創建Smarty對象$smarty = new Smarty();

  
修改Smarty默認行為開啟緩存模板的存放路徑等

  
將程序中取得的數據通過Smarty對象的assign()方法賦值給模板中相應的變量

  
用Smarty對象的display()方法將模板內容輸出

  
assign()方法

  
   這個方法用來給模板中的變量賦值使用比較容易

  
    原型void assign(string varnamemixed var)

  
    這個方法可以將php所支持的類型數據賦值給模板變量包含數組和對象

  
    使用方式有如下兩種

  //指定一對名稱/數值
    $smarty>assign(question你好嗎);
    $smarty>assign(answer不怎麼好);

  
    //指定包含名稱/數值
    $smarty>assign(array(question => 你好嗎answer => 不怎麼好));//這種方式比較少用
display()方法

  
    基於Smarty的腳本中必須用到這個方法而且一個腳本中只能使用一次它負責獲取和顯示由Smarty引擎引用的模板

  
    原型var display(string template[string cache_id][string compile_id])

  
    參數一template是必選的指定一個合法的模板資源的類型和路徑

  
    參數二cache_id指定一個緩存標識符的名稱

  
    參數三compile_id在維護一個頁面多個緩存時使用

  
    使用方法如下
    $smarty>display(tpl/template_dir/templatehtml);

  
簡單實例

  libs是Smarty類庫

  
       tpl/cache_dir存放緩存模板

  
       tpl/compile_dir存放編譯後模板文件

  tpl/config_dir存放特殊配置文件

  tpl/template_dir存放模板文件

  smartyphp文件裡 new 出了一個 Smarty類對象並設定各對象的屬性值如下代碼

  <?php

  
                require libs/Smartyclassphp;//加載Smartyclassphp文件               

  
                define(SITE_ROOT/tpl/);//定義一個常量

  $tpl = new Smarty();

  
                $tpl>template_dir = SITE_ROOT template_dir;//存模板文件   

  
                $tpl>compile_dir = SITE_ROOT compile_dir;//存編譯過的模板文件

  
                $tpl>config_dir = SITE_ROOT config_dir;//存特殊配置文件

  
                $tpl>cache_dir = SITE_ROOT cache_dir;//存Smarty緩存文件   

  
                $tpl>caching = ;//啟用緩存

  
                $tpl>cache_lifetime = **;//緩存時間天   

  
                $tpl>left_delimiter = <{;//左結束符

  
                $tpl>right_delimiter = }>;//右結束符

    代碼如下 復制代碼

  <?php

  
                require libs/Smartyclassphp;//加載Smartyclassphp文件               

  
                define(SITE_ROOT/tpl/);//定義一個常量

  $tpl = new Smarty();

  
                $tpl>template_dir = SITE_ROOT template_dir;//存模板文件   

  
                $tpl>compile_dir = SITE_ROOT compile_dir;//存編譯過的模板文件

  
                $tpl>config_dir = SITE_ROOT config_dir;//存特殊配置文件

  
                $tpl>cache_dir = SITE_ROOT cache_dir;//存Smarty緩存文件   

  
                $tpl>caching = ;//啟用緩存

  
                $tpl>cache_lifetime = **;//緩存時間天   

  
                $tpl>left_delimiter = <{;//左結束符

  
                $tpl>right_delimiter = }>;//右結束符

  indexphp文件 首頁代碼如下

  <?php           

  
                 require smartyphp;

  
                $tpl>assign(titletitle測試);

  
                $tpl>assign(contentcontent測試);

  
                $tpl>display(templatehtml);

    代碼如下 復制代碼

  <?php           

  
                 require smartyphp;

  
                $tpl>assign(titletitle測試);

  
                $tpl>assign(contentcontent測試);

  
                $tpl>display(templatehtml);

  tpl/template_dir/templatehtml 這是一個模板文件 代碼如下

  <html>               

  
                <head>               

  
                    <meta httpequiv="ContentType" content="text/html; charset=utf" />

  
                        <title>

  
                            <{$title}>

  
                        </title>

  
                </head>

  
                <body>

  
                        <{$content}>

  
                </body>

  
 </html>

    代碼如下 復制代碼

  <html>               

  
                <head>               

  
                    <meta httpequiv="ContentType" content="text/html; charset=utf" />

  
                        <title>

  
                            <{$title}>

  
                        </title>

  
                </head>

  
                <body>

  
                        <{$content}>

  
                </body>

  
 </html>


From:http://tw.wingwit.com/Article/program/PHP/201311/21263.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.