首頁 >後端開發 >php教程 >php Smarty 模板使用方法詳解_PHP教程

php Smarty 模板使用方法詳解_PHP教程

WBOY
WBOY原創
2016-07-22 09:02:351013瀏覽

一、範本中的註解


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


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


Smarty註解語法是'左結束符變數值*'和'*右結束符變數值',這兩個定界符之間的內容都是註解內容,可以包含一行或多行,並且使用者瀏覽網頁查看原始程式碼時不會看到註釋,它只是模板內在的註釋,以下是註釋小例子。


    $smarty->left_lelimiter = '

      $smarty->right_delimiter = '}>';

      註:

 程式碼如下 複製程式碼
 代码如下 复制代码

   $smarty->left_lelimiter = '<{';

$smarty->right_delimiter = '}>';

      注释:<{* this a note *}>   

   $smarty->left_lelimiter = '       $smarty->right_delimiter = '}>';       註:   

二:模板中變數宣告


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


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


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


     


     


     


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


三:模板中輸出從php分配的變數


     在Smarty模板中常用的變數有兩種:一是從php分配的變數;另一種是從設定檔讀取的變數


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


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

在範本中存取物件和php腳本中的方式一樣,都是透過'->'這個運算子完成的。


四:Smarty 模板中變數的數學計算

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

 

 


    


     bar - $bar[1] * $foo->bar - 3 * 7}>


    

 程式碼如下 複製程式碼
 代码如下 复制代码

    <{$foo 1}> <{* 变量加1 *}>


     <{$foo * $bar}> <{* 两个变量相乘 *}>


     <{$foo->bar - $bar[1] * $foo->bar - 3 * 7}> <{* 复合类型变量参加运算 *}>


     <{if($foo 2 == 10)}> <{* 数学运算在程序逻辑中应用 *}>

              bar - $bar[1] * $foo->bar - 3 * 7}>     


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

 程式碼如下 複製程式碼
 代码如下 复制代码


     <{"test $foo test"}> <{* 双引号中使用变量 *}>


     <{"test `$foo[0]` test"}> <{* 双引号中反引号包住的数组变量 *}>


     <{"test `$foo.bar` test"}> <{* 双引号中反引号包住的对象成员变量 *}>


 

                


    


    

第1步:載入Smarty模板引擎,如:require 'libs/Smarty.class.php'


步驟2:建立Smarty對象,如:$smarty = new Smarty();


步驟3:修改Smarty預設行為,如:開啟快取、範本的存放路徑等


步驟4:將程式中取得的資料透過Smarty物件的assign()方法賦值給模板中對應的變數


步驟5:用Smarty物件的display()方法將模板內容輸出


assign()方法


   這個方法用來為模板中的變數賦值,使用比較容易


    原型:void assign(string varname,mixed 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/template.html');


簡單實例

       1、libs:是Smarty類別函式庫


       2、tpl/cache_dir:存放快取模板


       3、tpl/compile_dir:存放編譯後範本檔案

       4、tpl/config_dir:存放特殊檔案

       5、tpl/template_dir:存放範本檔案

       6、smarty.php檔案裡 new 出了一個 Smarty類別對象,並設定各對象的屬性值,如下程式碼

   


                require 'libs/Smarty.class.php';//載入Smarty.class.php檔案         

                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 = 1;//啟用快取

                $tpl->cache_lifetime = 60*60*24;//快取時間1天   

                $tpl->left_delimiter = '


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

 程式碼如下 複製程式碼
 代码如下 复制代码

        


require 'libs/Smarty.class.php';//加载Smarty.class.php文件


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 = 1;//启用缓存


                $tpl->cache_lifetime = 60*60*24;//缓存时间1天   


                $tpl->left_delimiter = '<{';//左结束符


$tpl->right_delimiter = '}>';//右结束符

                         require 'libs/Smarty.class.php';//載入Smarty.class.php檔案                          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 = 1;//啟用快取                 $tpl->cache_lifetime = 60*60*24;//快取時間1天                    $tpl->left_delimiter = '                 $tpl->right_delimiter = '}>';//右結束符號

7、index.php檔 首頁碼如下


                 require 'smarty.php';


                $tpl->assign('title','title測驗');


                $tpl->assign('content','content測驗');


                $tpl->display('template.html');

 程式碼如下 複製程式碼
 代码如下 复制代码

      


require 'smarty.php';


$tpl->assign('title','title测试');


                $tpl->assign('content','content测试');


                $tpl->display('template.html');

                        require 'smarty.php';                 $tpl->assign('title','title測驗');                 $tpl->assign('content','content測驗');                 $tpl->display('template.html');

8、tpl/template_dir/template.html 這是一個範本檔案 程式碼如下

                    


               

               


                   


                       

<p><br>                             </p> <p><br>                         </p>


               


               


                       


               


 

 

 程式碼如下 複製程式碼
 代码如下 复制代码

                        


                               


                   


                        </p> <p><br>                             <{$title}></p> <p><br>                        


               


               


                        <{$content}>


               


 

                                                                                                                                                                                                                                  
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn