Smarty學(xué)習(xí)筆記

Smarty是一個PHP的模板引擎哆料。更明確來說暂氯,它可以幫助開發(fā)者更好地 分離程序邏輯和頁面顯示

一疮方、安裝

  1. 先從官網(wǎng)下在Smarty的壓縮包感论,解壓后笛丙,把目錄下的libs文件夾拷貝到你的php項目的目錄下逐工。
    比如我的項目目錄情況是這樣的:
  • libs
  • templates 該目錄是Smarty默認(rèn)的模板存放路徑
  • templates/index.tpl templates目錄下的模板文件 類似于html那種
  • templates_c 該目錄是Smarty默認(rèn)的模板和php編譯后的文件
  • index.php
    在index.php中寫入以下代碼:
    require "./libs/Smarty.class.php";
    $smarty = new Smarty;    // 創(chuàng)建一個Smarty實例
    $smarty -> assign('name', 'xiaoqiang');   // 將模板可能會用到的變量賦值到該實例化的對象中
    $smarty -> display('index.tpl'); // 內(nèi)部主要靠調(diào)用this -> compiler這個函數(shù)進行編譯轉(zhuǎn)換展示某個模板

在index.tpl寫入以下代碼:

    ...
    <body>
        我的名字是{$name}
    </body>
    ...

開啟php腳本后么抗,訪問本地index.php就能看到變量name被展示出來了.

二远荠、擴展設(shè)置

在index.php中寫入以下代碼:

    require "./libs/Smarty.class.php";
    $smarty = new Smarty;    // 創(chuàng)建一個Smarty實例
    // 下面是一些常用的配置的改變
    $smarty - >template_dir = './templates/';  // 設(shè)置模板的存放位置
    $smarty - >compile_dir = './templates_c/';  // 設(shè)置編譯后的文件存放的位置
    $smarty - >config_dir = './configs/';   // 設(shè)置配置文件的存放位置
    $smarty - >cache_dir = './cache/';   // 設(shè)置緩存文件的存放位置
    $smarty - >left_delimiter = '{'   // 設(shè)置左邊界符
    $smarty - >right_delimiter = '}'  // 設(shè)置右邊界符
    
    $smarty -> assign('name', 'xiaoqiang');   // 將模板用到的變量賦值到該實例化的對象中
    $smarty -> display('index.tpl'); // 展示某個模板

三赘那、基礎(chǔ)語法

1.注釋

    {* 我是注釋的內(nèi)容 *}

2.從php中分配變量

index.php:

    ...
    $smarty -> assign('name', 'xiaoqiang');   // 將模板用到的變量賦值到該實例化的對象中
    $smarty->assign('Contacts',
     array('fax' => '555-222-9876',
     'email' => 'zaphod@slartibartfast.com',
     'phone' => array('home' => '555-444-3333',
     'cell' => '555-111-1234')));
    ...

index.tpl:

    ...
    <body>
        我的名字是{$name}
        {$Contacts.fax}<br>
        {$Contacts.email}<br>
        {$Contacts.phone.home}<br>
        {$Contacts.phone.cell}<br>
    </body>
    ...

3.Smarty中保留的php變量
index.tpl:

    ...
    <body>
        <p>當(dāng)前用戶名: {$smarty.get.username|cat:" yesterday."}</p>
        <p>當(dāng)前密碼: {$smarty.get.password}</p>
        <p>當(dāng)前時間戳: {$smarty.now|date_format:"%Y/%m/%d"}</p>
        <p>{$smarty.post.page}</p>
        <p>{$smarty.cookies.username}</p>
        <p>{$smarty.server.SERVER_NAME}</p>
        <p>{$smarty.env.PATH}</p>
        <p>{$smarty.session.id}</p>
        <p>{$smarty.request.username}</p>
    </body>
    ...

4.變量的過濾器刑桑、修飾器(類似于Vue的filter)
常用的修飾器有:

    capitalize  // 將變量里的所有單詞首字大寫。
    count_characters  // 計算變量里的字符數(shù)
    cat  // 將cat里的值連接到給定的變量后面.
    date_format // 格式化從函數(shù)strftime()獲得的時間和日期(時間戳)漓概。
    default 為空變量設(shè)置一個默認(rèn)值漾月。當(dāng)變量為空或者未分配的時候,將由給定的默認(rèn)值替代輸出。
    escape  // 用于html轉(zhuǎn)碼,url轉(zhuǎn)碼
    lower胃珍、upper  // 將值全部轉(zhuǎn)換成大寫或小寫
    regex_replace  // 尋找和替換正則表達式
    replace  // 尋找內(nèi)容并替換掉指定的內(nèi)容
    string_format // 格式化字符串的方法.例如格式化為十進制數(shù)
    truncate  // 從字符串開始處截取某長度的字符.默認(rèn)是80個.
                 你也可以指定第二個參數(shù)作為追加在截取字符串后面的文本字串.該追加字串被計算在截取長度中梁肿。
                 默認(rèn)情況下,smarty會截取到一個詞的末尾。
                 如果你想要精確的截取多少個字符,把第三個參數(shù)改為"true"

具體參考Smarty的手冊觅彰,這里就不一一列舉了吩蔑。
另外,對于同一個變量填抬,你可以使用多個修改器烛芬。它們將從左到右按照設(shè)定好的順序被依次組合使用。使用時必須要用"|"字符作為它們之間的分隔符飒责。

    {$articleTitle|lower|spacify|truncate}
    {$articleTitle|lower|truncate:30|spacify}
    {$articleTitle|upper|spacify|truncate:30:". . ."}

5.常用內(nèi)建函數(shù)

    config_load  // 用于加載配置文件
    foreach, foreachelse  // 用于對數(shù)組進行遍歷
    include  // 用于在當(dāng)前模板中包含其它模板
    include_php  // 用于引入php文件
    insert // insert 函數(shù)類似欲 inluce 函數(shù)赘娄,不同之處是 insert 所包含的內(nèi)容不會被緩存,每次調(diào)用該模板都會重新執(zhí)行該函數(shù).
    if,elseif,else  // 條件判斷語句宏蛉,與php中的類似
    ldelim,rdelim  // 輸出 {或}這兩個字符遣臼,類似于&nbsp;那種
    literal   // 標(biāo)記使得Smarty不解析該段區(qū)域代碼
    section,sectionelse // 模板的 section 用于遍歷數(shù)組中的數(shù)據(jù). section 標(biāo)簽必須成對出現(xiàn). 必須設(shè)置 name 和 loop 屬性. 名稱可以是包含字母、數(shù)字和下劃線的任意組合. 可以嵌套但必須保證嵌套的 name 唯一. 變量 loop (通常是數(shù)組)決定循環(huán)執(zhí)行的次數(shù). 當(dāng)需要在 section 循環(huán)內(nèi)輸出變量時拾并,必須在變量后加上中括號包含著的 name 變量. sectionelse 當(dāng) loop 變量無值時被執(zhí)行.
    index  獲取index值揍堰,比如獲取section循環(huán)中的index值, {$smarty.section.customer.index}
    index_prev, index_next  // 用戶獲取上一個或下一個循環(huán)的值
    iteration  // iteration 不像index屬性受start嗅义、step和max屬性的影響屏歹,該值總是從1開始(index是從0開始的).rownum 是iteration的別名,兩者等同.
    first之碗、last  // 返回Boolean值蝙眶,用于判斷某個值是不是循環(huán)中的第一個值或最后一個 {$smarty.section.customer.first}  {$smarty.section.customer.last} 

6.自定義函數(shù)

    assign   assign 用于在模板被執(zhí)行時為模板變量賦值. {assign var="name" value="Bob"}
    counter  用于輸出一個記數(shù)過程. counter 保存了每次記數(shù)時的當(dāng)前記數(shù)值
    html_checkboxes  html中的checkbox {html_checkboxes name="id" options=$cust_checkboxes checked=$customer_id separator="<br />"}
    html_image  html中的img標(biāo)簽  {html_image file="/path/from/docroot/pumpkin.jpg"}
    html_radios  html中的radio標(biāo)簽 {html_radios values=$cust_ids checked=$customer_id output=$cust_names separator="<br />"}
    html_table  html中的table{html_table loop=$data cols=4 table_attr='border="0"'}  {html_table loop=$data cols=4 tr_attr=$tr}

本篇總結(jié)參考了:

Smarty的基本使用與總結(jié)

smarty完全中文手冊

Smarty官方文檔

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市褪那,隨后出現(xiàn)的幾起案子械馆,更是在濱河造成了極大的恐慌胖眷,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霹崎,死亡現(xiàn)場離奇詭異珊搀,居然都是意外死亡,警方通過查閱死者的電腦和手機尾菇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門境析,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人派诬,你說我怎么就攤上這事劳淆。” “怎么了默赂?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵沛鸵,是天一觀的道長。 經(jīng)常有香客問我缆八,道長曲掰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任奈辰,我火速辦了婚禮栏妖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奖恰。我一直安慰自己吊趾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布瑟啃。 她就那樣靜靜地躺著论泛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛹屿。 梳的紋絲不亂的頭發(fā)上孵奶,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天,我揣著相機與錄音蜡峰,去河邊找鬼。 笑死朗恳,一個胖子當(dāng)著我的面吹牛湿颅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粥诫,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼油航,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怀浆?” 一聲冷哼從身側(cè)響起谊囚,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤怕享,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后镰踏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體函筋,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年奠伪,在試婚紗的時候發(fā)現(xiàn)自己被綠了跌帐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡绊率,死狀恐怖谨敛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滤否,我是刑警寧澤脸狸,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站藐俺,受9級特大地震影響炊甲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜紊搪,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一蜜葱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧耀石,春花似錦牵囤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梆奈,卻和暖如春野崇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背亩钟。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工乓梨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人清酥。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓扶镀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親焰轻。 傳聞我的和親對象是個殘疾皇子臭觉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容