碼農小王乾貨分享,這一期帶你走進smarty模板引引擎

今天主要跟大家分享下模板引擎

目前常見的模板引擎有以下這幾種,模板引擎Smarty,Blade,Twig,Haml,Liquid,Mustache

碼農小王乾貨分享,這一期帶你走進smarty模板引引擎

其中最為常見的,比較主流的Smarty,Blade,這兩個分別對應是tp以及laravel

今天給大家講解下什麼是smarty

smarty是一個用PHP寫的模板引擎,它提供了一個前後端分類計數,前端開發前端,後臺開發後端的,美工開發美工的,互相不影響,可以極大的提升工作效率。

下來給大家介紹下smarty優點:

碼農小王乾貨分享,這一期帶你走進smarty模板引引擎

如果你使用過tp框架開發的話應該對這塊比較熟悉的

1. 開發速度快:用smarty編寫的程序速度會很快,因為傳統的php寫一個遍歷,如果沒有前後端分離,你需要寫大量的代碼,並且需要花費很多時間,這一點是相對於其它的模板引擎技術而言的。

2. 代碼編譯型:因為這個模板引擎是PHP與HTML混合的方式,在下一次訪問模板時將WEB請求直接保存到一個指定的文件目錄中,而不再進行模板重新編譯

碼農小王乾貨分享,這一期帶你走進smarty模板引引擎

3. 模板緩存技術:smarty選用的一種緩存技術,使用模板開發可以提供頁面的加載速度,對網站的性能也一種優化,這種模板緩存只要開啟了之後,在一段時間內容,他在渲染會去比對頁面內用,如果頁面一直,直接調動靜態文件,我們都知道靜態文件訪問速度是最快,減少io資源消耗,如果不一樣怎麼請求最新的數據再次緩存

碼農小王乾貨分享,這一期帶你走進smarty模板引引擎

不適合smarty的地方:

1. 對數據的實時性要求比較高的就不怎麼合適,比例像在線聊天,熱點新聞等都不適用。因為模板緩存的優勢在於對頁面的實時性要求不高

2. 項目太小的也不大適合,因為使用模板引擎需要實現分好,這個小團隊開發的速度不會體驗的很方便

現在教大家如何去使用smarty

1.https://www.smarty.net/download 登錄地址,去下載相對應的版本

Smarty 3.x: PHP 5.2+

Smarty 2.x: PHP 4 or 5

這個有版本要求,你只要根據你的開發環境去下載對應的版本即可

demo文件夾為示例文件夾,裡面包含默認文件夾結構,是我們要進行編寫程序代碼的主要文件夾。demo裡文件夾的名稱都是smarty默認的目錄結構名稱,可以通過改smarty對應屬性值,再把文件夾名改成我們想要的名稱。

libs為smarty代碼源文件夾,一般不動。

/libs/Smarty.class.php #主文件

/libs/sysplugins/ #內部plugin

/libs /plugins/ #外部plugin,可自由擴充

/demo/cahce/ #放置緩存文件

/demo/configs / #放置可以載入的配置文件

/demo/templates/ #放置模板文件

/demo/templates_c/ #放置對模板編譯後的文件

可以把解壓得到的 Smarty-3.1.12 文件夾名改成我們想要的項目名,demo也可以改成我們想要的具體存放編碼的文件夾的名稱

2、調試Smarty-3.1.12

接下來我們去創建自己的文件,在D盤下demo文件夾下創建index.php。

在templates目錄中創建模板index.tpl

(幾乎可以是任何文本文件的擴展名,這個模板引擎常用的是tpl,php,html,不建議使用後兩者,因為可以從瀏覽器直接訪問而不安全。可以對apache的httpd.conf進行設置,禁止直接訪問.tpl文件。或者將templats目錄放在網站文檔樹之外,可以大大的提升站點安全性。)

*/

//接下來我們直接用代碼演示

碼農小王乾貨分享,這一期帶你走進smarty模板引引擎

require('../libs/Smarty.class.php'); //index.php代碼

$smarty = new Smarty; //實例化對象

$smarty->assign('name','zhang');//對變量賦值 直接將zhang賦值給變量 name

$smarty->display('templates/index.tpl'); //調用模板tpl文件裡不能執行PHP語句塊

/*

index.tpl頁面內容

我們可以直接使用 {$name} {}裡面就是對應的變量 直接輸出模板

測試一下 {$name}

*/

/*

上面的代碼操作是不是很簡單,傳統的我們需要顯示變量需要使用

這麼長的一串代碼

smarty處理過程

smarty是將原本php源文件,把他編譯成中間文件也是php腳本文件,如果說你開啟緩存,會根據編譯文件再次生成緩存文件(也是php)。

之後的每次訪問都會訪問編譯文件,如果啟用緩存且有緩存文件而且沒有過期,則直接訪問緩存文件,跳過編譯文件。這樣子的就可以提升你的網頁加載速度

編譯文件一經生成,就不會被自動更新,除非模板文件或者配置文件更改。源php文件修改是不會引發重新編譯的。

*/

//Smarty允許有兩種特殊的編譯設置存在:

// 下面給大家介紹下關於模板緩存的開啟

$smarty->setCaching(true); //開啟緩存

$smarty->getCaching();//獲取當前緩存狀態,默認是false關閉的

$smarty->setcache_lifetime(60);//設置緩存時間單位秒

/*

smarty分界符

在模板文件中,區分普通html代碼和smarty代碼靠的是分界符。默認是 {} ,但可能會與js和css相沖突。可以進行變更。

*/

$smarty->left_delimiter = "{"; //左分界符,2.0屬性,3.0沿用

$smarty->right_delimiter = "}";

/*

分界符就相當於PHP的echo,分界符中的值都將輸出,除非賦值等操作

smarty tpl文件中分界符中兩個**之間的內容為註釋內容如

tpl文件:

{*這是模板註釋內容*}

*/

//設置緩存目錄路徑,不設默認"cache"

$smarty->setCacheDir("cache");

//獲取緩存目錄路徑

$smarty->getCacheDir();

//設置配置目錄路徑,不設默認"configs"

$smarty->setConfigDir("configs");

//添加配置目錄路徑,所有路徑將會以數組形式保存,調用文件時將在所有路徑中查找

$smarty->addConfigDir("configs/test");

//獲取配置目錄路徑的數組

$smarty->getConfigDir();

//設置插件目錄路徑,不設默認"plugins"

$smarty->setPluginsDir("plugins");

//添加插件目錄路徑,所有路徑將會以數組形式保存,調用文件時將在所有路徑中查找,plugins文件夾裡放的就是可以在前臺或後臺按不同規則調用的函數的存儲文件,文件名及函數名的命名按不同調用規則有不同寫法要求

$smarty->addPluginsDir("plugins/test");

//獲取插件目錄路徑的數組

$smarty->getPluginsDir();

//設置模板目錄路徑,不設默認"templates"

$smarty->setTemplateDir("templates");

//添加模板目錄路徑,所有路徑將會以數組形式保存,調用文件時將在所有路徑中查找

$smarty->addTemplateDir("templates/test");

//獲取模板目錄路徑的數組

$smarty->getTemplateDir();

//設置編譯目錄路徑,不設默認"templates_c"

$smarty->setCompileDir("templates_c");

//獲取編譯目錄路徑

$smarty->getCompileDir();

//模版變量, 我們傳遞數組

$arr = array(array("name","111"),'a'=>array("age","222"),array("classname","333"));

$smarty->assign("testArr", $arr);

//設置模版變量,為將要調用的模版提供變量,在接下來調用的模版中可以通過{$testArr}或者{$testArr['a'][0]}或者{$testArr.a.0}來訪問具體某數組元素

//在模版中可以直接通過 {$testArr = "testValue" scope="global"} 來更改傳過來的模板變量的值(如果不存在則在模板中創建並設置該模版變量),scope屬性是標註模板變量使用範圍的可不寫

//在模版中更改或創建成其他數組 {$testArr = [1,2,3]}也可以{$testArr = [1,'a'=>2,2=>3]}也可以{$testArr[] = 4}或其他類似PHP中創建數組方式

//php源文件可通過 $smarty->getTemplateVars("testArr") 獲取指定模版變量,如要獲取模板中改變或創建的模版變量,在模板中創建或更改其值時必須加上scope屬性並把值設置為scope="global"或scope="parent"

class SDemo{

function demo($nam){

echo $nam;

}

}

$smarty->assign("obj", new A); //把對象直接賦值給變量

//Smarty可以識別嵌入在雙引號中的模版變量,只要此變量只包含數字、字母、下劃線。但貌似只支持能直接轉換成字符串的模版變量

$smarty->assign("testStr", "this is smart");

//模板中可通過{"$testStr OK !"}來訪問

/*

tpl模板包含模板 使用也很簡單

模板文件:

{include file="headerinfo.tpl"} //這樣子就是直接調用頭部文件

headerinfo.tpl內容:

這是頂部內容!!,歡迎你,{$name}

模板包含模板也可以是這樣格式

{include file="headerinfo.tpl" testVar="這是頂部內容!!!"}

headerinfo.tpl則可以通過{$testVar}使用調用頁包含時傳來的模板變量

{$testVar},歡迎你,{$name}


*/

/*

我們都知道 我們在寫頁面的時候可能涉及到很多邏輯

這個模板引擎也有提供了相應的功能

我們直接使用if判斷

{if $name == "張三"}

你好 張三.

{elseif $name == "李四"}

你好 李四.

{else}

你好, 未知

{/if}

{*操作符可以是 ==,>= 等也可以是 eq,ne等*}

{for $x=0; $x<count>

{$x}

{/for}

{*for循環,類似PHP代碼*}

{$x=0}

{while $x<count>

{$x++}

{/while}

{*While循環,也類似PHP代碼。*}

{*也可以如下兩種類PHP格式*}

{foreach $demoArr as $n}

{$n}

{/foreach}

{foreach $demoArr as $key=>$n}

{$key}

{/foreach}

*/

//PHP文件:

//$smarty->setDebugging(true);//對後續調用的模板進行調試。

//$smarty->getDebugging();//得到當前是否進行調試,默認false

//或在需要調試的模版中寫入{debug}

/*

模板文件:

smarty3.0支持了模版繼承系統,例如

nav.tpl:

/<count>

{block name='top'} nav.header
{/block}

{block name='middle'} nav.middle
{/block}

{block name='buttom'} nav.buttom
{/block}

以上就是一些關於samrt一些基礎操作

大家要是覺得有學習到的話可以收藏關注哦

/<count>


分享到:


相關文章: