samrty學習快速上手教程+例項
smarty
配置:
<?php
/**
*
* @version $Id: index.php
* @package
* @author www.php100.com
* @action 顯示例項程式
*/
include_once(“./Smarty/Smarty.class.php”); //包含smarty類檔案
$smarty = new Smarty(); //建立smarty例項物件$smarty
$smarty->templates(“./templates”); //設定模板目錄
$smarty->templates_c(“./templates_c”); //設定編譯目錄
$smarty->cache(“./cache”); //快取目錄
$smarty->cache_lifetime = 0; //快取時間
$smarty->caching = true; //快取方式
$smarty->left_delimiter = “{#”;
$smarty->right_delimiter = “#}”;
$smarty->assign(“name”, “zaocha”); //進行模板變數替換
$smarty->display(“index.htm”); //編譯並顯示位於./templates下的index.htm模板
?>
二:解釋smarty的程式
我們可以看到,smarty的程式部分實際就是符合php語言規範的一組程式碼,我們依次來解釋一下:
1:/**/語句:
包含的部分為程式篇頭註釋。主要的內容應該為對程式的作用,版權與作者及編寫時間做一個簡單的介紹,這在smarty中不是必需的,但從程式的風格來講,這是一個好的風格。
2:include_once語句:
它將安裝到網站的smarty檔案包含到當前檔案中,注意包含的路徑一定要寫正確。
3:$smarty = new Smarty():
這一句新建一個Smarty物件$smarty,簡單的一個物件的例項化。
4:$smarty->templates(“”):
這一句指明$smarty物件使用tpl模板時的路徑,它是一個目錄,在沒有這一句時,Smarty預設的模板路徑為當前目錄的templates目錄,實際在寫程式時,我們要將這一句寫明,這也是一種好的程式風格
。
5:$smarty->templates_c(“”):
這一句指明$smarty物件進行編譯時的目錄。在模板設計篇我們已經知道Smarty是一種編譯型模板語言,而這個目錄,就是它編譯模板的目錄,要注意,如果站點位於linux伺服器上,請確保
teamplates_c裡定義的這個目錄具有可寫可讀許可權,預設情況下它的編譯目錄是當前目錄下的templates_c,出於同樣的理由我們將其明確的寫出來。
6:$smarty->left_delimiter與$smarty->right_delimiter:====自定義界定符:
指明在查詢模板變數時的左右分割符。預設情況下為”{“與”}”,但在實際中因為我們要在模板中使用<script>,Script中的函式定義難免會使用{},雖然它有自己的解決辦法,但習慣上我們將它重新定義
為”{#”與”#}”或是”<!–{“與”}–>”或其它標誌符,注意,如果在這裡定義了左右分割符後,在模板檔案中相應的要使每一個變數使用與定義相同的符號,例如在這裡指定為”<{“與”}>”,htm模板中也要
相應的將{$name}變成<{$name}>,這樣程式才可以正確的找到模板變數。
7:$smarty->cache(“./cache”):
告訴Smarty輸出的模板檔案快取的位置。上一篇我們知道Smarty最大的優點在於它可以快取,這裡就是設定快取的目錄。預設情況下為當前目錄下的cache目錄,與templates_c目錄相當,在linux系統中
我們要確保它的可讀可寫性。
8: $smarty->cache_lifetime = 60 * 60 * 24:
這裡將以秒為單位進行計算快取有效的時間。第一次快取時間到期時當Smarty的caching變數設定為true時快取將被重建。當它的取值為-1時表示建立起的快取從不過期,為0時表示在程式每次執行時緩
存總是被重新建立。上面的設定表示將cache_lifetime設定為一天。
9: $smarty->caching = 1:
這個屬性告訴Smarty是否要進行快取以及快取的方式。它可以取3個值,0:Smarty預設值,表示不對模板進行快取;1:表示Smarty將使用當前定義的cache_lifetime來決定是否結束cache;2:表示
Smarty將使用在cache被建立時使用cache_lifetime這個值。習慣上使用true與false來表示是否進行快取。
10:$smarty->assign(“name”, “zaocha”):
該數的原型為assign(string varname, mixed var),varname為模板中使用的模板變數,var指出要將模板變數替換的變數名;其第二種原形為assign(mixed var),我們要在後面的例子詳細的講解這個成員函式的使用方法,assign是Smarty的核心函式之一,所有對模板變數的替換都要使用它。
11. $smarty->display(“index.tpl”):
該函式原形為display(string varname),作用為顯示一個模板。簡單的講,它將分析處理過的模板顯示出來,這裡的模板檔案不用加路徑,只要使用一個檔名就可以了,它路徑我們已經在$smarty->templates(string path)中定義過了。
程式執行完後我們可以開啟當前目錄下的templates_c與cache目錄,就會發現在下邊多出一些%%的目錄,這些目錄就是Smarty的編譯與快取目錄,它由程式自動生成,不要直接對這些生成的檔案進行修改。
以上我簡單的把Smarty程式中的一些常用的基本元素介紹了一下,在後邊的例子中你可以看到將它們將被多次的使用。
語法:
模板呼叫,index.php:
smarty->assign(“模板變數”, “值(陣列/變數)”);
$smarty->display(“模板名稱”);
例句:
$smarty->assign(“name”, “PHP100中文站”); //進行模板變數替換,替換後模板變數就是$name,切忌
$smarty->display(“index.htm”); // 該檔案就是模板檔案,應該在模板目錄下,顯示檔案
引入:
三種引入模式:
{include file=”header.htm”}
{include file=”D:/www/head.htm”}
{include file=`head.htm` title=”Main Menu”}
判斷:
{if $name==`ok`}
{else}
{/if}
迴圈:
對於一維陣列:經常使用
=======無鍵值陣列
{foreach from=$name item=id}
id: {$id}<br>
{/foreach}
=======有鍵值陣列
{foreach key=j item=v from=$name }
{$j}: {$v}<br>
{/foreach}
–*********item:內容{鍵值},key:鍵值,from:陣列
手冊解釋:
foreach 是除 section 之外處理迴圈的另一種方案(根據不同需要選擇不同的方案).
foreach 用於處理簡單陣列(陣列中的元素的型別一致),它的格式比 section 簡單許多,缺點是隻能處理簡單陣列.
foreach 必須和 /foreach 成對使用,且必須指定 from 和 item 屬性.
name 屬性可以任意指定(字母、數字和下劃線的組合).
foreach 可以巢狀,但必須保證巢狀中的 foreach 名稱唯一.
from 屬性(通常是陣列)決定迴圈的次數.
foreachelse 語句在 from 變數沒有值的時候被執行.
對於二維陣列:
{section name=s loop=$stu}
{$stu[s].name}
{sectionelse}
無內容
{/section}
——********
name: section的名稱,不用加$,相當於給二維陣列從新建立索引
$loop: 要迴圈的變數,在程式中要使用assign對這個變數進行操作
手冊解釋:
模板的 section 用於遍歷陣列中的資料. section 標籤必須成對出現. 必須設定 name 和 loop 屬性.
名稱可以是包含字母、數字和下劃線的任意組合. 可以巢狀但必須保證巢狀的 name 唯一. 變數 loop (通常是陣列)決定迴圈執行的次數.
當需要在 section 迴圈內輸出變數時,必須在變數後加上中括號包含著的 name 變數. sectionelse 當 loop 變數無值時被執行.
輸出:{$name}
採用{}界定符可以實現類似php
<?php ?>標籤的功能
二、示例站點目錄結構:
PHP程式碼:——————————————————————————–
+Web (站點根目錄)
|
|—-+comm (Smarty相關文件目錄)
| |
| |—-+plugins (Smarty外掛目錄)
| |—–Config_File.class.php (Smarty配置檔案)
| |—–Smarty.class.php (Smarty類主檔案)
| |—–Smarty_Compiler.class.php (Smarty編譯類檔案)
|
|—-+cache (Smarty快取目錄,*nix下保證讀寫許可權)
|
|—-+templates (站點模板檔案存放目錄)
| |
| |—-header.tpl(頁面頁頭模板檔案)
| |—-index.tpl(站點首頁模板檔案)
| |—-foot.tpl(頁面頁尾模板檔案)
| |—-news.tpl (新聞頁模板檔案)
|
|
|—-+templates_c (模板檔案編譯後存放目錄,*nix下保證讀寫許可權)
|
|—-+css (站點CSS檔案目錄)
|
|—-+image (站點圖片目錄)
|
|—-+media (站點Flash動畫存放目錄)
|
|—-indexbak.htm (首頁原始效果圖)
|
|—-newsbak,htm (新聞頁原始效果圖)
|
|—-index.php (Smarty首頁程式檔案)
|
|—-news.php (Smarty新聞顯示檔案)
|
|—-例程說明.txt (目錄說明)
|
|—-資料庫建立檔案.txt (資料庫的建立文件)
與資料庫的連線:
smarty_inc.php是引入samrty的檔案,那麼同理資料庫也要配置一個類檔案;mysql_inc.php
模板的強大之處在於與資料連線,然後讀取資料,經過迴圈處理輸出結果
index.php 程式碼:
include(“smarty_inc.php”);
include(“mysql_inc.php”);
$conn=db_connect($h,$p,$u,$db);
mysql_query(“SET names `UTF8`”);
$sql=”select id,board_name,board_desc from boards”;
$res=mysql_query($sql);
if(mysql_num_rows($res)){
while($row=mysql_fetch_array($res)){
$time=$row[`id`];
$array[]=array(`id`=>$row[`id`],`bname`=>$row[`board_name`],`bdesc`=>$row[`board_desc`]);
}
}
$smarty->assign(“name”,$array); //進行模板變數替換
$smarty->display(“index.htm”); //編譯並顯示位於./templates下的index.htm模板
–*****************************************************************
反思:如何學習模板:
1)配置:配置檔案,其實就是引入模板的過程:注意事項:引入檔案的路徑正確與否,模板的基本引數設定,例項化一個
2)模板的使用,主要是語法類,和php語言一樣他也有自身的一套處理機制,類比php,有四點:引入,判斷,迴圈,輸出 這個四個基本類的語法知識
3)與資料連線起來,讀取資料資料,顯示輸出
相關文章
- Vue入門指南-01建立vue例項 (快速上手vue)Vue
- 資訊科技快速上手教程
- Caffe 深度學習框架上手教程深度學習框架
- 結合例項學習F#(一) --快速入門
- React 教程:快速上手指南React
- 例項:學習XOR
- Makefile例項學習
- Spring Boot 學習筆記(1):快速上手Spring Boot筆記
- 深度學習框架新手快速上手指南深度學習框架
- Vue入門指南-05 Vue例項的生命週期(快速上手vue)Vue
- tail命令學習例項AI
- CSS學習摘要-定位例項CSS
- React入門學習例項React
- Maven例項講解教程,從零開始學Maven,帶你快速入門!Maven
- SSM 框架快速整合例項--學生查詢SSM框架
- 值得Web開發人員學習的20個jQuery例項教程WebjQuery
- ORM 例項教程ORM
- Java例項教程Java
- Python學習:類和例項Python
- 通過例項學習 PyTorchPyTorch
- 通過例項學習 tcpdump 命令TCP
- 三菱PLC例項學習
- 學習Python快速教程 尾聲Python
- 例項教程:1小時學會PythonPython
- 如何快速的學習一項技術?
- 小白怎麼學習短視訊剪輯?怎樣快速上手?
- vue 原始碼學習 - 例項掛載Vue原始碼
- 用Go例項學習Protobuf編碼Go
- oracle例項恢復的學習理解Oracle
- CSS動畫學習指南:原理與例項CSS動畫
- Oracle學習快速入門基礎教程Oracle
- Smarty例項教程(2)
- Smarty例項教程(5)
- 設計模式快速學習(三)單例模式設計模式單例
- Redis 快速上手Redis
- 快速上手BootstrapVuebootVue
- ElasticJob 快速上手AST
- Flask快速上手Flask