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

來源:互聯網
上載者:User
一、模板中的注釋


每一個Smarty模板檔案,都是通過Web前台語言(xhtml,css和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函數分配值*}>


<{*從設定檔中讀取的變數的值並輸出*}>


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


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


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


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


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

在模板中訪問對象和php指令碼中的方式一樣,都是通過'->'這個運算子完成的。


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

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

<{$foo + 1}> <{* 變數加1 *}>


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


<{$foo->bar - $bar[1] * $foo->bar - 3 * 7}> <{* 複合類型變數參加運算 *}>


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

代碼如下 複製代碼

<{$foo + 1}> <{* 變數加1 *}>


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


<{$foo->bar - $bar[1] * $foo->bar - 3 * 7}> <{* 複合類型變數參加運算 *}>


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


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

代碼如下 複製代碼


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


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


<{"test `$foo.bar` test"}> <{* 雙引號中反引號包住的對象成員變數 *}>


<{"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 = '}>';//右結束符

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');

8、tpl/template_dir/template.html 這是一個模板檔案 代碼如下




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




<{$content}>



代碼如下 複製代碼




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




<{$content}>



http://www.bkjia.com/PHPjc/371918.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/371918.htmlTechArticle一、模板中的注釋 每一個Smarty模板檔案,都是通過Web前台語言(xhtml,css和javascript等)結合Smarty引擎的文法開發的。 用到的web前台開發的語言...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.