六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

PHP-Web應用程序開發(fā):使用模板

[摘要]每個進行過較大型的PHP-Web應用程序設計的開發(fā)人員大概都有如下的經(jīng)歷:花大量的時間寫超文本語句,為頁面排版,兼作美工等;或在整合的程序代碼在和HTML靜態(tài)頁面時花費大量的時間。的確,用腳本語言開...
每個進行過較大型的PHP-Web應用程序設計的開發(fā)人員大概都有如下的經(jīng)歷:花大量的時間寫超文本語句,為頁面排版,兼作美工等;或在整合的程序代碼在和HTML靜態(tài)頁面時花費大量的時間。的確,用腳本語言開發(fā)Web應用不容易將數(shù)據(jù)的處理和數(shù)據(jù)的顯示分開,但在多人合作的情況下,如果無法將數(shù)據(jù)和顯示分開,將大大影響開發(fā)的效率,專業(yè)分工的發(fā)揮。為了解決這個問題,PHP也提供了自己的解決方案,有多種,本文主要介紹PHPLIB中的Template類。

1 模板處理類的設計
模板處理類主要需完成以下的任務:
·從模板文件中讀取顯示用的HTML代碼。
·將模板文件和實際生成的數(shù)據(jù)結合,生成輸出的結果。
·允許同時處理多個模板。
·允許模板的嵌套。
·允許對模板中的某個單獨的部分進行處理。

歸納上述任務,模板類的設計目標為:從多個模板文件中讀入顯示的HTML代碼,將這些顯示代碼中需要動態(tài)數(shù)據(jù)的地方替換為PHP程序運算所得出的數(shù)據(jù),然后按照一定的順序輸出。其中,替換的部分可以自由的設定。

讀取顯示用的HTML代碼采用讀文件的方式
模板文件和數(shù)據(jù)的結合采用正則替換
處理多個模板用數(shù)組存儲來實現(xiàn)。
模板的嵌套的實現(xiàn)主要的想法是:將模板和輸出(任何中間的分析結果)一視同仁,都可拿來做替換,即可實現(xiàn)。
單獨部分的處理的通過在模板文件中設定標注,然后在正則替換中結合標注來控制,實現(xiàn)部分替換。

2 模板處理類的實現(xiàn)
請參看PHPLib中的Template.inc,總共345行代碼,有詳細的注釋。以下列舉一些主要的函數(shù),供研讀參考:
1) function set_file($handle,$filename=” ”) line 77, 讀取文件
2) function set_var($varname, $value = "") line 119, 設置映射數(shù)據(jù)-替換變量
3) function set_block($parent, $handle, $name = "") line 96, 設置標注
4) function subst($handle) line 136, 執(zhí)行數(shù)據(jù)替換
5) function parse($target, $handle, $append = false) line 165, 執(zhí)行模板文件與數(shù)據(jù)的結合
6) function p($varname) line 268, 輸出處理結果
注:本人下載的php-lib7.2c的Template.inc文件中的第95行少了個“/”,加上后使用正常。

3 模板處理類的使用
3.1 最基本的例子
為了簡單起見,這里假設模板文件、使用模板的PHP文件和模板處理類的文件都放在同一個目錄下。PHPLIB中的習慣是使用ihtml后綴為模板文件的后綴。
下面是要使用的模板文件:


<html>
<head>
<title>使用模板的測試</title>
</head>
<body>
<h2>這是一個使用模板的測試文件!</h2>
當前的時間是{currenttime}!
</body>
</html>
注:模板文件和通常的HTML文件差不多,唯一不同的是使用“{}”括起來的是可以被模板處理類替換的動態(tài)內(nèi)容的變量。

接下來使用模板處理類來處理上面的模板:
<?
//引入Template類
include("template.inc");

//得到需要替換的數(shù)據(jù)
$timeNow=date("Y-m-d H:i:s",time());

//實例化一個Template類
$template= new Template();

//載入test.ihtml模板
$template->set_file("handle1","test.ihtml");

//使用$timeNow的值替換模板中的currenttime
$template->set_var("currenttime",$timeNow);

//進行實際的模板操作
$template->parse("output","handle1");

//輸出最后結果
$template->p("output");
?>

注:如果只想用PHPLIB中的模板類,只需在文件頭包含Template.inc類即可。
創(chuàng)建Template對象時,可以指定模板文件路徑,如:new Template(“/htdocs/apps/templates/”),缺省為當前路徑。

3.2 模板嵌套與塊設定
下面這個例子來自與PHPLIB的參考手冊,綜合性較強,這里需說明的一點是設定塊的目的與嵌套無關,但這個范例包含了兩者。請仔細閱讀,塊設定是為了避免這種情況:原本可在一個模板文件(靜態(tài)頁面)里完成的內(nèi)容,因需要部分循環(huán),而將部分循環(huán)內(nèi)容提取單獨做成模板文件。請思考,如果不用塊設定,這個例子是不是需要3個模板文件呢?
模板文件1,page.ihtml
<html>
<head><title>{PAGETITLE}</title></head>
<body bgcolor="#ffffff">
<table border=1 cellpadding=4 cellspacing=0 bgcolor="#eeeeee">
<tr>
<td colspan=2><h1>{PAGETITLE}</h1></td>
</tr>
<tr>
<td>{OUT}</td>
<td>Content</td>
</tr>

</body>
</html>

模板文件2,box.ihtml
<!-- start box.ihtml -->
<table border=1 bgcolor="#cccccc" cellpadding=4 cellspacing=0>
<tr>
<td colspan=2><b>{TITLE}</b></td>
</tr>
<!-- BEGIN row -->
<tr>
<td>{NUM}</td>
<td>{BIGNUM}
</tr>
<!-- END row -->

<!-- end box.ihtml -->

模板處理文件,test.php
<?php
//引入Template類
include("template.inc");

#實例化一個Template類,名字叫$t
$t = new Template();

# 建立包含模板文件的數(shù)組
$t->set_file(array(
"page" => "page.ihtml",
"box" => "box.ihtml"));

# 載入模板文件box中的一個塊row,引用名稱為rows
$t->set_block("box", "row", "rows");

# 設置替換
$t->set_var(array("TITLE" => "Testpage",
"PAGETITLE" => "hugo"));

# 生成數(shù)據(jù)NUM,BIGNUM
for ($i=1; $i<=3; $i++) {
$n = $i;
$nn = $i*10;
#設置替換
$t->set_var(array("NUM" => $n, "BIGNUM" => $nn));
#進行分析,分析的結果添加到rows的后面
$t->parse("rows", "row", true);
}

# 生成box,再生成page
$t->parse("OUT", array("box", "page"));

# 輸出最后結果
$t->p("OUT");
?>

注:這里page.ihtml模板文件中變量的命名與最后的輸出句柄都用了“OUT”。
循環(huán)取值部分采用數(shù)據(jù)庫類,即可將數(shù)據(jù)的生成與數(shù)據(jù)庫應用結合起來。
執(zhí)行結果如下圖:



模板嵌套與塊設定執(zhí)行結果圖

4 小結
本文主要簡要介紹了PHPLIB中Template類的設計、實現(xiàn)及使用方法。當然,還有許多其他的PHP模板方案,如由Perl中演化而來的FastTemplates。目前Internet小組采用的是另一種方案,主要的實現(xiàn)方式是模板文件入庫,采用eval來實現(xiàn)數(shù)據(jù)與模板文件的結合等,相對來說模板文件的管理與模板處理的使用比較簡潔,但缺少文件存放的模式。本人目前在做的一些嘗試是將兩者結合起來,并想在PHPLIB的Template類的基礎上進行改進。初步的目標任務有兩個:1、在讀取模板文件時擴展其對數(shù)據(jù)庫的支持,這樣可以在必要時增強靈活性與使用數(shù)據(jù)庫管理工具 2、化簡模板文件與數(shù)據(jù)的結合,因為在實際使用中大多數(shù)情況下無需將模板文件中的變量在處理程序中再設置(數(shù)據(jù)變量映射)一遍。
在此也希望讀者、PHP程序愛好者一起參與進來,多提寶貴意見,祝好運!




主站蜘蛛池模板: 亚洲综合第一 | 夜间免费视频 | 日韩色天使综合色视频 | 日本在线观看高清不卡免v 日本在线观看a | 日本在线观看一区二区三区 | 中文字幕精品一区影音先锋 | 亚洲图色网站 | 中文字幕在线精品不卡 | 青青青在线视频人视频在线 | 亚洲人成激情在线播放 | 奇米综合| 欧美亚洲国产精品久久高清 | 日日摸日日 | 人人舔人人爱 | 色又色| 色妹子在线 | 天天曰夜夜曰 | 青娱乐最新官网 | 青娱乐在线免费视频 | 欧美一级黄色录像 | 色黄网站在线观看 | 色婷婷综合激情 | 一级做a爰片性色毛片思念网 | 欧美性猛交xxxx乱大交极品 | 午夜国产精品不卡在线观看 | 亚洲自偷自偷图片在线高清 | 日本二区视频 | 午夜影视在线视频观看免费 | 日韩一本 | 一级香蕉视频在线观看 | 亚洲精品高清视频 | 午夜视频在线观看网站 | 日本高清在线视频www色下载 | 色手机在线| 日日夜夜网站 | 亚洲成人在线网站 | 色综合色综合色综合 | 人人狠狠综合久久亚洲88 | 日本高清色本免费现在观看 | 欧美亚洲国产人成aaa | 亚洲v天堂 |