亚洲国产日韩欧美在线a乱码,国产精品路线1路线2路线,亚洲视频一区,精品国产自,www狠狠,国产情侣激情在线视频免费看,亚洲成年网站在线观看

利用PHP引擎smarty

時(shí)間:2025-12-22 05:18:35 php語言

利用PHP模板引擎smarty

  PHP模板引擎smarty詳細(xì)介紹,本文講解了什么是smarty、smarty優(yōu)點(diǎn)、不適合使用smarty的地方、smarty目錄結(jié)構(gòu)及版本,需要的朋友可以參考下。

  一、什么是smarty?

  smarty是一個(gè)使用PHP寫出來的模板PHP模板引擎,它提供了邏輯與外在內(nèi)容的分離,簡(jiǎn)單的講,

  目的就是要使用PHP程序員同美工分離,使用的程序員改變程序的邏輯內(nèi)容不會(huì)影響到美工的頁面設(shè)計(jì),美工重新修改頁面不會(huì)影響到程序的程序邏輯,這在多人合作的項(xiàng)目中顯的尤為重要。

  二、smarty優(yōu)點(diǎn):

  1. 速度:采用smarty編寫的程序可以獲得最大速度的提高,這一點(diǎn)是相對(duì)于其它的模板引擎技術(shù)而言的。

  2. 編譯型:采用smarty編寫的程序在運(yùn)行時(shí)要編譯成一個(gè)非模板技術(shù)的PHP文件,這個(gè)文件采用了PHP與HTML混合的方式,在下一次訪問模板時(shí)將WEB請(qǐng)求直接轉(zhuǎn)換到這個(gè)文件中,而不再進(jìn)行模板重新編譯(在源程序沒有改動(dòng)的情況下)

  3. 緩存技術(shù):smarty選用的一種緩存技術(shù),它可以將用戶最終看到的HTML文件緩存成一個(gè)靜態(tài)的HTML頁,當(dāng)設(shè)定smarty的cache屬性為true時(shí),在smarty設(shè)定的cachetime期內(nèi)將用戶的WEB請(qǐng)求直接轉(zhuǎn)換到這個(gè)靜態(tài)的HTML文件中來,這相當(dāng)于調(diào)用一個(gè)靜態(tài)的HTML文件。

  4. 插件技術(shù):smarty可以自定義插件。插件實(shí)際就是一些自定義的函數(shù)。

  5. 模板中可以使用if/elseif/else/endif。在模板文件使用判斷語句可以非常方便的對(duì)模板進(jìn)行格式重排。

  三、不適合使用smarty的地方:

  1. 需要實(shí)時(shí)更新的內(nèi)容。例如像股票顯示,它需要經(jīng)常對(duì)數(shù)據(jù)進(jìn)行更新,這類型的程序使用smarty會(huì)使模板處理速度變慢。

  2. 小項(xiàng)目。小項(xiàng)目因?yàn)轫?xiàng)目簡(jiǎn)單而美工與程序員兼于一人的項(xiàng)目,使用smarty會(huì)喪失php開發(fā)迅速的優(yōu)點(diǎn)。

  四、smarty目錄結(jié)構(gòu)及版本

  打開smarty的官方的網(wǎng)站,www.smarty.net/download.php。下載Smarty 3.1.12。有tar.gz和zip分別適用于linux和windows版本。

  下載好后Smarty-stable-3.1.12解壓縮會(huì)得到一個(gè) Smarty-3.1.12 文件夾,里面有兩個(gè)主要文件夾demo和libs

  demo文件夾為示例文件夾,里面包含默認(rèn)文件夾結(jié)構(gòu),是我們要進(jìn)行編寫程序代碼的主要文件夾。demo里文件夾的名稱都是smarty默認(rèn)的目錄結(jié)構(gòu)名稱,可以通過改smarty對(duì)應(yīng)屬性值,再把文件夾名改成我們想要的名稱。

  libs為smarty代碼源文件夾,一般不動(dòng)。

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

  /libs/sysplugins/ #內(nèi)部plugin

  /libs /plugins/  #外部plugin,可自由擴(kuò)充

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

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

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

  /demo/templates_c/  #放置對(duì)模板編譯后的文件

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

  2、調(diào)試Smarty-3.1.12

  創(chuàng)建自己的文件,在demo文件夾下創(chuàng)建index.php。

  在templates目錄中創(chuàng)建模板index.tpl

 。◣缀蹩梢允侨魏挝谋疚募臄U(kuò)展名,常用的是tpl,php,html,不建議使用后兩者,因?yàn)榭梢詮臑g覽器直接訪問而不安全?梢詫(duì)apache的httpd.conf進(jìn)行設(shè)置,禁止直接訪問.tpl文件;蛘邔emplats目錄放在網(wǎng)站文檔樹之外。)

  */

  /pic/p>

  require('../libs/Smarty.class.php');

  $smarty = new Smarty;

  /pic/p>

  $smarty->assign('name','zhang');

  /pic/p>

  $smarty->display('templates/index.tpl');

  /*

  index.tpl頁面內(nèi)容

  

  

  你好, {$name}

  

  

  */

  /*

  Smarty編譯時(shí)的處理過程是源php文件->模板文件(可能調(diào)用多個(gè)或多次)->源php文件。。。

  也就是說不影響原php文件的其他處理和輸出。所以smarty模板文件可以是完整的html,也可以是其中一部分。

  smarty處理過程

  smarty將php源文件,首先編譯成中間文件(也是php),如果啟用緩存,再根據(jù)編譯文件生成緩存文件(也是php),需要緩存的部分全部是硬編碼。

  之后的每次訪問都會(huì)訪問編譯文件(如果編譯文件已經(jīng)存在),一次編譯多次調(diào)用(可以是單文件的多次,也可以是多文件的多次),如果啟用緩存且有緩存文件而且沒有過期,則直接訪問緩存文件,跳過編譯文件。

  編譯文件一經(jīng)生成,就不會(huì)被自動(dòng)更新,除非模板文件或者配置文件更改。源php文件修改是不會(huì)引發(fā)重新編譯的。一旦編譯文件重新生成,緩存文件也必然重新生成。

  */

  /pic/p>

  /pic/p>

  $smarty->setCompile_check(false);/pic/p>

  $smarty->getCompile_check();/pic/p>

  /pic/p>

  $smarty->setForce_compile(true);/pic/p>

  $smarty->getForce_compile();/pic/p>

  /pic/p>

  $smarty->setCaching(true);

  $smarty->getCaching();/pic/p>

  $smarty->setcache_lifetime(60);/pic/p>

  /pic/p>

  /pic/p>

  /pic/p>

  /pic/nocache}

  /pic/p>

  /*

  smarty分界符

  在模板文件中,區(qū)分普通html代碼和smarty代碼靠的是分界符。默認(rèn)是 {} ,但可能會(huì)與js和css相沖突?梢赃M(jìn)行變更。

  在3.0中模板標(biāo)簽將不支持空格,如{ $abc }在Smarty2中可以識(shí)別的,但是3.0里頭就不行了,必須這樣{$abc},這樣是為了能夠更好的支持javascript和css。

  */

  $smarty->left_delimiter = "{";  /pic/p>

  $smarty->right_delimiter = "}";

  /*

  分界符就相當(dāng)于PHP的echo,分界符中的值都將輸出,除非賦值等操作

  smarty tpl文件中分界符中兩個(gè)**之間的內(nèi)容為注釋內(nèi)容如

  tpl文件:

  {*這是模板注釋內(nèi)容*}

  */

  /pic/p>

  $smarty->setCacheDir("cache");

  /pic/p>

  $smarty->getCacheDir();

  /pic/p>

  $smarty->setConfigDir("configs");

  /pic/p>

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

  /pic/p>

  $smarty->getConfigDir();

  /pic/p>

  $smarty->setPluginsDir("plugins");

  /pic/p>

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

  /pic/p>

  $smarty->getPluginsDir();

  /pic/p>

  $smarty->setTemplateDir("templates");

  /pic/p>

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

  /pic/p>

  $smarty->getTemplateDir();

  /pic/p>

  $smarty->setCompileDir("templates_c");

  /pic/p>

  $smarty->getCompileDir();

  /*

  我們可以建不同的php源文件文件夾,把編寫的php文件按一定的分類放在不同的文件夾中。

  然后在每個(gè)文件夾中都創(chuàng)建一個(gè)自定義的config文件,在config文件中創(chuàng)建一個(gè)新的$smarty = new Smarty 對(duì)象

  然后把所有不同的文件夾的php文件的緩存,配置文件,插件,模版,編譯目錄都設(shè)置到同一個(gè)緩存,配置文件,插件,模版,編譯目錄

  讓該文件夾下所有PHP源文件都引用該配置文件即可獲取相同配置

  */

  /pic/p>

  $arr = array(array("zhang","li"),'a'=>array("liu","wang"),array("ming","yi"));

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

  /pic/p>

  /pic/p>

  /pic/p>

  /pic/p>

  class A{

  function aa($nam){

  echo $nam;

  }

  }

  $smarty->assign("obj", new A);

  /pic/p>

  /pic/p>

  /pic/p>

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

  /pic/p>

  /*

  tpl模板包含模板

  模板文件:

  {include file="header.tpl"}

  header.tpl內(nèi)容:

  這是頂部?jī)?nèi)容!!,歡迎你,{$name}

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

  {include file="header.tpl" testVar="這是頂部?jī)?nèi)容!!!"}

  header.tpl則可以通過{$testVar}使用調(diào)用頁包含時(shí)傳來的模板變量

  header.tpl內(nèi)容:

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



  */

  /*

  可以預(yù)先規(guī)定一系列的變量與值的對(duì)應(yīng),并放在配置文件中,在使用時(shí)載入。

  配置文件默認(rèn)放在configs文件夾中,可以自定義修改文件夾名。

  */

  /*

  #模板test.conf文件:

  #鍵對(duì)應(yīng)的值可以不用引號(hào)括起來

  title = Welcome to Smarty!!

  cutoff_size = 40

  [china]

  language = chinese

  [england]

  language = english

  #[china],[england]為標(biāo)簽,未設(shè)置標(biāo)簽的鍵值為全局的只要調(diào)用該配置文件就可以在模版中使用,設(shè)置了標(biāo)簽的鍵值只有在調(diào)用配置文件時(shí)指定了對(duì)應(yīng)標(biāo)簽才可以使用

  #在PHP源文件調(diào)用配置文件語句$smarty->configLoad('test.conf', $sections = 'england');該語句下面調(diào)用的模版才可以使用該配置文件,通過$sections屬性指定使用哪個(gè)標(biāo)簽下的鍵和值

  #$sections參數(shù)可以不寫,默認(rèn)值為null,$smarty->configLoad('test.conf')則只使用全局的鍵值,而不能使用標(biāo)簽下的鍵值

  #在模版下通過{config_load file="test.conf" section="china" scope="global"}語句調(diào)用配置文件

  #section屬性可以不寫,默認(rèn)是null,scope屬性必須寫{config_load file="test.conf" scope="global"}

  #section屬性可賦三種值

  #local 只有當(dāng)前模版可以使用該配置文件

  #parent 只有當(dāng)前模版引入該配置文件語句后包含的模版中,或在php源文件中smarty對(duì)象調(diào)用該配置文件后調(diào)用的模版中可以使用該配置文件中的鍵值

  #global 測(cè)試效果和parent相同

  #在模版中通過{#language#}來使用鍵值,也可以通過{$smarty.config.language}來訪問配置文件鍵值

  #PHP源文件中可以使用$smarty->getConfigVars('language')或$smarty->getConfigVariable('language')來獲取鍵值,$smarty->getConfigVars('language')獲取的還可能是數(shù)組

  */

  /*

  tpl文件中常用函數(shù)

  tpl文件:

  

  

  {capture name="testCapture"}

  {include file="f1.tpl"}

  {/capture}

  {if true}

  {$smarty.capture.testCapture}

  {/if}

  {if $name == "wang"}

  Welcome wang.

  {elseif $name == "zhang"}

  Welcome zhang.

  {else}

  Welcome, whatever you are.

  {/if}

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

  {for $x=0; $x<count($testArr); $x++}

  {$x}

  {/for}

  {*for循環(huán),類似PHP代碼*}

  {$x=0}

  {while $x<count($testArr)}

  {$x++}

  {/while}

  {*While循環(huán),也類似PHP代碼。*}

  

  {foreach name="testForeach" from=$testArr key=arId item=arVal}

  {$arId}對(duì)應(yīng)的值為:{$arVal}

  

  {$smarty.foreach.testForeach.index}  

  {$smarty.foreach.testForeach.iteration}  

  {$smarty.foreach.testForeach.first}

  {$smarty.foreach.testForeach.last}

  {$smarty.foreach.testForeach.total}

  

  {foreachelse}

  $testArr is null

  {/foreach}

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

  {foreach $testArr as $n}

  {$n}

  {/foreach}

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

  {$key}

  {/foreach}

  {$sectionArr = [0=>"a",4=>"b","c","d","e",6,7,8,9,10,11,12,13,14,15,16]}

  {section name="testSection" loop=$sectionArr start=0 step=4 max=6 show=true}

  {$smarty.section.testSection.index}-

  {$sectionArr[testSection]}-

  {$smarty.section.testSection.iteration}-

  

  {sectionelse}

  $sectionArr is null

  {/section}

  

  

  

  */

  /*

  tpl模板文件:

  {literal}

  

script type="text/javascript"

  function a(){

  alert("this is script");

  }

  a();

  /script


【利用PHP引擎smarty】相關(guān)文章:

php-smarty模版引擎中的緩存應(yīng)用09-25

PHP原生模板引擎 PHP最簡(jiǎn)單的模板引擎02-22

PHP中使用smarty生成靜態(tài)文件的實(shí)例09-16

PHP中--autoload和Smarty沖突的解決方法01-10

PHP框架之Smarty中的注釋和截?cái)喙δ芙榻B03-15

PHP引擎全速運(yùn)轉(zhuǎn)的三個(gè)絕招01-03

利用PHP校驗(yàn)ISBN碼函數(shù)01-31

利用PHP實(shí)現(xiàn)短域名互轉(zhuǎn)12-09

PHP的自定義模板引擎使用方法10-29