日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Smarty的基本使用与总结

發(fā)布時間:2023/12/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Smarty的基本使用与总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、簡介

含義:Smarty是PHP的一個引擎模板,可以更好的進行邏輯與顯示的分離,即我們常說的MVC,這個引擎的作用就是將C分離出來。

環(huán)境需求:PHP5.2或者更高版本

我使用的環(huán)境是:PHP5.3,windows 環(huán)境

2、安裝

? ? ?在網(wǎng)上下載Smarty包直接將其解壓,我們需要的僅僅是里面的libs文件夾。Libs文件里面都是庫文件,我們不應(yīng)該修改里面的任何內(nèi)容。解壓完畢后就直接將libs文件夾放入到我們需要使用的網(wǎng)站根目錄。

?

3、基本情況簡介

? ? ?首先打開Smarty.class.php文件看看里面的一些代碼:

Smarty的構(gòu)造器:

  

templates:默認存放模板文件夾

templates_c:默認存放混編文件的文件夾

cache:存放緩存

configs:存放配置文件

默認左右邊界符:

  

?

4、使用

? ? ?從上文了解到Smarty需要一些文件夾用來分別存放不同類別的文件。有templates、templates_c、cache、configs等文件夾。這是默認文件夾名稱,你可以根據(jù)你的喜好對它們進行更改。

1、下是我建立的文件夾:

2、簡單實例

先在templates文件夾下準備自己需要的模板文件。test1.html

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>smarty test1</title> 6 </head> 7 <body> 8 它的名字叫{$name} 9 </body> 10 </html>

接著在根目錄下建立訪問的邏輯文件。test1.php

1 <?php 2 require './libs/Smarty.class.php'; 3 $smarty=new Smarty(); 4 $name='劉二狗'; 5 $smarty->assign( 'name' , $name ); 6 $smarty->display('./test1.html');

訪問test1.php結(jié)果為:

  

當訪問完后將會在templates_c中生成一個相應(yīng)的混編文件

  

這就是Smarty在PHP中的簡單使用。

5、Smarty常用的語法

5.1、普通變量的聲明與使用

  一共有兩種聲明變量的方法。

  第一種:上面的例子已經(jīng)使用過,即$smarty->assign('name','值');

  第二種:在模板文件中聲明(html中),即{assign var='name' ?value='值'}?

  使用:{$name}

  注意:也可以定義與使用數(shù)組。假若上面定義的name為一個一維數(shù)組,使用時即:{$name[2]}、{$name['aa']}={$name.aa}等等使用方式。

5.2、注釋

? ? ?{* 這里面是注釋內(nèi)容 *}

? ? ?Smarty的注釋是不會在最終頁面輸出顯示的,即:若在html里則效果像<!--注釋-->一樣,不過也有一定的區(qū)別,Smarty的注釋在瀏覽器里查看源代碼也是不顯示的,而html的注釋是顯示的。例如:

  ? ? ? ??? ? ? ?

?

5.3、數(shù)組

  Smarty對數(shù)組的使用:數(shù)組[下標]、數(shù)組.下標

5.4、對象

  對象的聲明和變量一樣,通過assign來聲明

  使用采用 -> ?來調(diào)用對象的屬性

  

  

  ?

5.5、保留變量

? ? ? Smarty中有一個特殊的變量(就是smarty)可以通過這個變量很容易就可以訪問到一些環(huán)境變量。就像PHP中的超全局變量一樣神奇。

? ? ? 注意:在使用這個保留變量的時候:smarty是對于大小寫敏感的,我們需要的是小寫的smarty

例子:

一、使用smarty訪問PHP中的超全局數(shù)組變量:

  1、獲取$_GET?? ??{$smarty.get.name}??? 獲取get中的name值

  2、獲取$_POST??? {$smarty.post.name}?? 獲取post中的name值

  3、獲取$_COOKIE? {$smarty.cooke.name}? 獲取cookie中的name值

  同理,還可以獲取$_SERVER, $_ENV 和 $_SESSION等等

注意:雖然Smarty提供了較方便直接訪問PHP超全局變量的方法,但必須謹慎使用。 直接訪問超全局變量會弄亂應(yīng)用程序底層代碼和模板語法。 最佳的實踐是從PHP將需要的變量對模板進行賦值再使用。

二、獲取當前時間戳

  {$smarty.now}其原理就是調(diào)用了timr()函數(shù)

三、直接訪問PHP常量

  {$smarty.const.常量名}即{$smarty.const.AGE}

PHP定義常量

  

smarty直接調(diào)用常量

  

結(jié)果

  

四、其他

  獲取配置變量:{$smarty.config}

  返回當前模板名稱:{$smarty.template}

  返回當前模板對象:{$smarty.template_object}

  返回當前目錄名稱:{$smarty.current_dir}

  等等

5.6、配置文件

  之前根據(jù)需求建立的Configs文件夾可以派上用處啦!我們在這個文件夾下建立Smarty.conf配置文件(命名任意,木有明確規(guī)定),配置文件可以讓設(shè)計者將全局的模板變量以文件的方式管理起來。

  首先我們先來定義一些配置變量來對它進行簡單的了解:

定義如下所示:

  

引入配置文件:{config_load? file=’Smarty.conf’}

引用配置變量:{#配置變量#}、{$smarty.config.配置變量}

  

顯示結(jié)果:

  

了解段落變量定義與引用:

  在Smarty配置文件中大體分為兩種變量,一種為全局變量,另一種為段落變量。全局全局變量故名思議就是就是每次載入這個配置文件的時候這些變量都會被加載。而段落變量則有選擇的進行加載。

段落變量的定義語法:

  [段落名字]

  段落名字:這里可以是任意字符但不包括’[‘和’]‘,具體定義看下面Smarty.conf

調(diào)用段落變量:在引入配置文件后面加上這段代碼?section='段落名字'。

注意:section只能使用一次,若有多個section引入多個段落變量則最后一個會覆蓋前面的所有section引入的段落變量,即只有最后一個引入的段落變量有用其他作廢。

Smarty.conf文件

1 #這里是注釋,#為注釋符號 2 #這里是全局變量,也就是說title和bodyColor變量每次都會被加載 3 title='標題' 4 bodyColor='#eee' 5 6 #段落變量 7 [firstStyle] 8 color='#00f' 9 width='200px' 10 height='300px' 11 12 [.secondStyle] 13 color='#00f' 14 width='200px' 15 height='300px' 16 17 [other] 18 other='這是其他'

test1.html文件

1 {config_load file='Smarty.conf' section='firstStyle'} 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <meta charset="utf-8"> 6 <title>smarty test1</title> 7 </head> 8 <body> 9 <!-- 這里是html注釋 --> 10 {*這是Smarty注釋*} 11 名字:{$jane->name }<br/> 12 性別:{$jane->sex}<br/> 13 年齡:{$jane->age} 14 <hr/> 15 常量年齡:{$smarty.const.AGE} 16 <hr/> 17 使用配置變量1:{#title#}<br/> 18 使用配置變量2:{$smarty.config.bodyColor} 19 <hr/> 20 段落變量加載:<br/> 21 {#color#} 22 <br/> 23 {#other#} 24 </body> 25 </html>

訪問結(jié)果:

  

注意:

  1、若全局變量與被加載的段落變量有相同的變量名,則段落名的值將覆蓋全局變量的值。

  2、若某個段落變量里含有相同的變量名,則最后一個的變量的值將會覆蓋前面的值。

  3、在整個smarty.conf文件中,點(.)擁有相對較高的權(quán)限的。點的作用是將一個變量或者整個段落隱藏,不能被使用。(我的理解就是相當于被注釋掉不能被使用)

段落變量的一個簡單應(yīng)用:

  假若我們要使一個網(wǎng)站可以在多種風格的界面轉(zhuǎn)換,這時我們使用段落變量就可以很容易就實現(xiàn)了。

test1.html

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>smarty test1</title> 6 <style type="text/css"> 7 #aa{width: 200px;height: 200px;background: red;} 8 </style> 9 </head> 10 <body> 11 <div id='aa'> 12 這是一個div 13 </div> 14 </body> 15 </html>

訪問結(jié)果:

  訪問結(jié)果出現(xiàn)一個錯誤。由于使用了smarty模板,所以在html的所有{}將會被smarty解析。

  解決方法:

  1、更換定界符

  2、在({)前面加一個空格,

  3、使用{literal}{/literal}?? literal:原樣的,原義的

  

簡單應(yīng)用,讓一個div實現(xiàn)兩種背景顏色:

test1.php

1 <?php 2 require './libs/Smarty.class.php'; 3 $smarty=new Smarty(); 4 $smarty->display('./test1.html');

Smarty.conf

1 #段落變量 2 #第一種顏色風格 3 [firstStyle] 4 color='#00f' 5 width='300px' 6 height='300px' 7 content='第一種風格' 8 9 #第二種顏色風格 10 [secondStyle] 11 color='#0f0' 12 width='500px' 13 height='500px' 14 content='第二種風格'

測試1:

test1.html

1 {config_load file='Smarty.conf' section='firstStyle'} 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <meta charset="utf-8"> 6 <title>smarty test1</title> 7 <style type="text/css"> 8 #aa{ width: {#width#};height: {#height#};background: {#color#};} 9 </style> 10 </head> 11 <body> 12 <div id='aa'> 13 14 這是一個div<br/><br/> 15 {#content#} 16 </div> 17 </body>

結(jié)果:

測試2:

test2.html

1 {config_load file='Smarty.conf' section='secondStyle'} 2 <!DOCTYPE html> 3 <html> 4 <head> 5 <meta charset="utf-8"> 6 <title>smarty test1</title> 7 <style type="text/css"> 8 #aa{ width: {#width#};height: {#height#};background: {#color#};} 9 </style> 10 </head> 11 <body> 12 <div id='aa'> 13 14 這是一個div<br/><br/> 15 {#content#} 16 </div> 17 </body> 18 </html>

結(jié)果:

?

5.7、判斷{if}{elseif}{else}

  Smarty的{if}條件判斷和PHP的if非常相似,只是增加了一些特性。 每個{if}必須有一個配對的{/if}. 也可以使用{else} 和 {elseif}. 全部的PHP條件表達式和函數(shù)都可以在if內(nèi)使用,如||, or, &&, and, is_array(), 等等.?

注意:如果開啟了安全機制,那么只有在$php_functions設(shè)置允許的php函數(shù)才能夠使用。

運算符表:

  

5.8、for

{for}{forelse}用于創(chuàng)建簡單的循環(huán)

{forelse}在循環(huán)不能遍歷的時候使用

例子:

  

  

5.9、while

  Smarty的while循環(huán)和PHP中的while循環(huán)是幾乎一樣的,smarty中需要在后面增加</while>來結(jié)束

  

  例子:

  

  

結(jié)果:

  

5.10、{section}{sectionelse}

可以循環(huán)遍歷連續(xù)數(shù)字索引的數(shù)組,不能循環(huán)關(guān)聯(lián)數(shù)組

基本使用:

   

  ?

訪問結(jié)果:

  

不使用賦值數(shù)組直接輸出:

  

結(jié)果:

  

遍歷關(guān)聯(lián)數(shù)組:

  

  

結(jié)果:

  

  Section還有很多關(guān)鍵字強大的功能還沒有一一列出來,具體可以參考smarty手冊。Foreach相對于section來說顯得更加強大,能用section做到的,foreach也能做到,并且foreach使用起來更加方便簡單,接下來我們來學(xué)習了解foreach。

?

5.11、foreache與foreachelse

  通過類比的方法可以知道foreache是用來循環(huán)數(shù)組的。如果不存在遍歷的數(shù)組則執(zhí)行{foreachelse}部分

注意:這里不存在的數(shù)組指的是定義后這個數(shù)組沒有數(shù)據(jù)。假若這個數(shù)組沒有定義,則會發(fā)出警告。

簡單例子:

1 <?php 2 require './libs/Smarty.class.php'; 3 $smarty=new Smarty(); 4 $arr=array('name'=>'小明','sex'=>'男','age'=>'18'); 5 $smarty->assign( 'arr' , $arr ); 6 $smarty->assign('arr0',array()); 7 $smarty->display('./test1.html'); 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>smarty test1</title> 6 </head> 7 <body> 8 {foreach $arr as $k=>$v} 9 {$k}=>{$v}<br/> 10 {foreachelse} 11 99999 12 {/foreach} 13 <hr/> 14 {foreach $arr0 as $k=>$v} 15 {$k}=>{$v}<br/> 16 {foreachelse} 17 此處輸出foreachelse,無數(shù)據(jù) 18 {/foreach} 19 </body> 20 </html>

訪問結(jié)果:

  

在smarty中使用foreach和我們在PHP中的foreach循環(huán)幾乎是一樣的,就是書寫的方式不一樣,但形式上是一樣的!

foreach具有一些內(nèi)部關(guān)鍵字:

1、@iteration,當前循環(huán)次數(shù),從1開始

2、@index,表示當前索引,從零開始

3、@first當前是首次循環(huán)是,first為true

4、@last循環(huán)最后一次時,last為true

5、@show,是在{foreach}循環(huán)執(zhí)行后,,檢測循環(huán)是否有輸出,show是一個布爾值

6、@total,{foreach}的循環(huán)次數(shù),total可以在{foreach}內(nèi)部,或者之后使用

7、{break},停止循環(huán)

8、{continue},跳出此次循環(huán)

例子:

1 <?php 2 require './libs/Smarty.class.php'; 3 $smarty=new Smarty(); 4 $arr=array('name'=>'狗蛋','sex'=>'男','age'=>'18','from'=>'廣東','tel'=>'123456789'); 5 $smarty->assign( 'arr' , $arr); 6 $smarty->display('./test1.html'); 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>smarty test1</title> 6 </head> 7 <body> 8 {foreach $arr as $k=>$v} 9 10 11 {if $v@iteration==2} 12 <b>{$k}=>{$v}</b>---這里iteration,從1開始計算<br/> 13 {continue} 14 {/if} 15 16 {if $v@index==2} 17 <b>{$k}=>{$v}</b>---這里index,從0開始計算<br/> 18 {continue} 19 {/if} 20 21 {if $v@first} 22 <b>{$k}=>{$v}</b>---這里first,數(shù)組第一個元素<br/> 23 {continue} 24 {/if} 25 26 {if $v@last} 27 <b>{$k}=>{$v}</b>---這里last,數(shù)組最后一個元素<br/> 28 {break} 29 break將已經(jīng)跳出去了,不能在輸出這里的內(nèi)容了【這個例子跳出整個循環(huán)的現(xiàn)在不能夠檢驗,讀者可自己進行測試】 30 {/if} 31 32 {$k}=>{$v}<br/> 33 34 {/foreach} 35 <hr/> 36 總循環(huán)次數(shù):{$v@total} 37 {if $v@show} 38 <hr/> 39 判斷上面循環(huán)有輸出<br/> 40 {/if} 41 42 </body> 43 </html>

訪問結(jié)果:

   

5.12、自定義函數(shù)

Smarty自帶了一些自定義的函數(shù)插件,可以在模板內(nèi)使用。

  以下是參考smarty手冊所列的自定義函數(shù):

  a、{counter},用于顯示一個計數(shù)器。 {counter}可以記住foreach循環(huán)的次數(shù)。

  b、{cycle},用于交替循環(huán)一系列值。?

  c、{fetch},用于獲取文件內(nèi)容、HTTP或者FTP內(nèi)容,以便輸出。

  d、{html_checkboxes},是一個自定義函數(shù),用于創(chuàng)建HTML的多選框組和提供數(shù)據(jù)。

  e、{html_image},用于生成HTML的<img>標簽。

  f、{html_options},可以提供數(shù)據(jù),生成HTML<select><option>標簽,還可以設(shè)置選中項等屬性。

  g、{html_radios},用于創(chuàng)建HTML的單選框和提供數(shù)據(jù)。

  h、{html_select_data},用于創(chuàng)建一個選擇日期的下拉框。 它可以顯示任何或者全部的年、月、日。 任何不在上面列表中的鍵值對屬性,都會被輸出到<select>標簽中作為屬性和值。

  i、{html_select_time},用于創(chuàng)建一個選擇時間的下拉框。 它可以顯示任何或全部的小時、分鐘、秒和上下午。

  j、{html_table},可以使用數(shù)組的形式的數(shù)據(jù)來創(chuàng)建一個HTML的<table>。

  k、{mailto},可以自動創(chuàng)建一個mailto:鏈接,而且可以選擇編碼方式。 對郵件編碼可以使郵件地址更難以被網(wǎng)絡(luò)爬蟲抓取。

  l、{math},可以讓模板設(shè)計者在模板中進行一些數(shù)學(xué)運算。

  m、{textformat},是一個用于格式化文本的塊函數(shù)。

以上是smarty的自定義函數(shù),具體的使用方法請參考smarty手冊。

5.13、模板布局

即是模板的繼承問題。使用的關(guān)鍵字主要有block、extends

首先,我們先在站點建立一個layout文件夾(主要用來存放父模板文件),然后在文件夾下建立一個模板文件template.html

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>這個是模板文件</title> 6 </head> 7 <body> 8 <h2>這個是模板文件輸出的</h2> 9 10 <hr/> 11 子輸出一:{block name='first'}{/block} 12 <hr/> 13 <hr/> 14 子輸出二:{block name='second'}{/block} 15 <hr/> 16 17 <h2>這個是模板文件輸出的</h2> 18 </body> 19 </html>

接著再建立模板文件test.html,此模板需要繼承上面的父模板

1 {extends file='layout/template.html'} 2 {block name='first'} 3 這里是test中的first 4 {/block} 5 {block name='second'} 6 這里是test中的second 7 {/block}

邏輯文件調(diào)用smarty,test.php

1 <?php 2 require './libs/Smarty.class.php'; 3 $smarty=new Smarty(); 4 $smarty->display('./test.html');

訪問結(jié)果:

  

小結(jié):若含較多的公共部分,則采用布局文件;含公共部分較少,則采用包含文件{include file='文件路徑'}

?

(以上是自己的一些見解,若有不足或者錯誤的地方請各位指出)

作者:那一葉隨風

聲明:本博客文章為原創(chuàng),只代表本人在工作學(xué)習中某一時間內(nèi)總結(jié)的觀點或結(jié)論。轉(zhuǎn)載時請在文章頁面明顯位置給出原文鏈接。

轉(zhuǎn)載于:https://www.cnblogs.com/phpstudy2015-6/p/6216107.html

總結(jié)

以上是生活随笔為你收集整理的Smarty的基本使用与总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。