<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>

            利用PHP引擎smarty

            時間:2025-12-22 05:18:35 php語言

            利用PHP模板引擎smarty

              PHP模板引擎smarty詳細介紹,本文講解了什么是smarty、smarty優點、不適合使用smarty的地方、smarty目錄結構及版本,需要的朋友可以參考下。

              一、什么是smarty?

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

              目的就是要使用PHP程序員同美工分離,使用的程序員改變程序的邏輯內容不會影響到美工的頁面設計,美工重新修改頁面不會影響到程序的程序邏輯,這在多人合作的項目中顯的尤為重要。

              二、smarty優點:

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

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

              3. 緩存技術:smarty選用的一種緩存技術,它可以將用戶最終看到的HTML文件緩存成一個靜態的HTML頁,當設定smarty的cache屬性為true時,在smarty設定的cachetime期內將用戶的WEB請求直接轉換到這個靜態的HTML文件中來,這相當于調用一個靜態的HTML文件。

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

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

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

              1. 需要實時更新的內容。例如像股票顯示,它需要經常對數據進行更新,這類型的程序使用smarty會使模板處理速度變慢。

              2. 小項目。小項目因為項目簡單而美工與程序員兼于一人的項目,使用smarty會喪失php開發迅速的優點。

              四、smarty目錄結構及版本

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

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

              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

              創建自己的文件,在demo文件夾下創建index.php。

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

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

              */

              /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頁面內容

              

              

              你好, {$name}

              

              

              */

              /*

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

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

              smarty處理過程

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

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

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

              */

              /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分界符

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

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

              */

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

              $smarty->right_delimiter = "}";

              /*

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

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

              tpl文件:

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

              */

              /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文件按一定的分類放在不同的文件夾中。

              然后在每個文件夾中都創建一個自定義的config文件,在config文件中創建一個新的$smarty = new Smarty 對象

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

              讓該文件夾下所有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內容:

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

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

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

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

              header.tpl內容:

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



              */

              /*

              可以預先規定一系列的變量與值的對應,并放在配置文件中,在使用時載入。

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

              */

              /*

              #模板test.conf文件:

              #鍵對應的值可以不用引號括起來

              title = Welcome to Smarty!!

              cutoff_size = 40

              [china]

              language = chinese

              [england]

              language = english

              #[china],[england]為標簽,未設置標簽的鍵值為全局的只要調用該配置文件就可以在模版中使用,設置了標簽的鍵值只有在調用配置文件時指定了對應標簽才可以使用

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

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

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

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

              #section屬性可賦三種值

              #local 只有當前模版可以使用該配置文件

              #parent 只有當前模版引入該配置文件語句后包含的模版中,或在php源文件中smarty對象調用該配置文件后調用的模版中可以使用該配置文件中的鍵值

              #global 測試效果和parent相同

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

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

              */

              /*

              tpl文件中常用函數

              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循環,類似PHP代碼*}

              {$x=0}

              {while $x<count($testArr)}

              {$x++}

              {/while}

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

              

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

              {$arId}對應的值為:{$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】相關文章:

            php-smarty模版引擎中的緩存應用09-25

            PHP原生模板引擎 PHP最簡單的模板引擎02-22

            PHP中使用smarty生成靜態文件的實例09-16

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

            PHP框架之Smarty中的注釋和截斷功能介紹03-15

            PHP引擎全速運轉的三個絕招01-03

            利用PHP校驗ISBN碼函數01-31

            利用PHP實現短域名互轉12-09

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

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院