国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

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

2024-05-04 23:04:56
字體:
供稿:網(wǎng)友


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

一、模板處理類的設(shè)計
  模板處理類主要需完成以下的任務(wù):

  • 從模板文件中讀取顯示用的html代碼。 
  • 將模板文件和實際生成的數(shù)據(jù)結(jié)合,生成輸出的結(jié)果。
  • 允許同時處理多個模板。
  • 允許模板的嵌套。
  • 允許對模板中的某個單獨的部分進(jìn)行處理。



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

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

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

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

<html>
<head>
<title>使用模板的測試</title>
</head>
<body>
<h2>這是一個使用模板的測試文件!</h2>
當(dāng)前的時間是{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);

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

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

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

  3.2 模板嵌套與塊設(shè)定
  下面這個例子來自與phplib的參考手冊,綜合性較強(qiáng),這里需說明的一點是設(shè)定塊的目的與嵌套無關(guān),但這個范例包含了兩者。請仔細(xì)閱讀,塊設(shè)定是為了避免這種情況:原本可在一個模板文件(靜態(tài)頁面)里完成的內(nèi)容,因需要部分循環(huán),而將部分循環(huán)內(nèi)容提取單獨做成模板文件。請思考,如果不用塊設(shè)定,這個例子是不是需要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>
</table>
</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 -->
</table>
<!-- 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"
);

# 設(shè)置替換
$t->set_var(array("title" => "testpage"
,
"pagetitle" => "hugo"
));

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

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴楚县| 利津县| 松潘县| 台东县| 呼图壁县| 会同县| 左贡县| 睢宁县| 钦州市| 恭城| 中超| 宁武县| 沧州市| 甘南县| 手游| 新昌县| 涞水县| 贵南县| 南靖县| 日照市| 辛集市| 徐水县| 太仓市| 滨州市| 怀化市| 宾阳县| 遵义县| 本溪| 康保县| 玛沁县| 丹棱县| 遵义市| 罗山县| 巴东县| 青州市| 黄龙县| 广昌县| 辰溪县| 九江县| 莱阳市| 绥滨县|