PHPlib Template 模板類中文文檔

來源:互聯網
上載者:User
// from:  http://www.4kiki.net/php_lib_template/

PHPlib Template 模板類中文文檔 第一版 2004-10-16 iwind譯 (2004-10-24更新)
第十章. 模板(Template)

目錄

模板類執行個體變數

模板類執行個體方法
可調用的執行個體方法

內部執行個體方法
模板類應用舉例

備忘: 如果你認為它像FastTemplates,那你要認真閱讀了,其實它不是.

該模板類允許你在一些外部檔案中保留HTML代碼,這些檔案完全不包含PHP代碼,只含有用以替換的欄位(譯註:就是下文中所說的變數的"引用")。這個類就提供了一些可以讓你用任意的字串填入欲替換欄位的函數。

 

備忘: 該文檔的版本不再維護,請參閱template.inc 源檔案中的注釋部分,以獲得最可靠的文檔.

模板類執行個體變數

可調用的執行個體變數

classname 字串(String).類序列協助:類名稱.
debug 整型(Integer). 標識:設為1可觀察所有變數賦值情況,設為2可觀察可調用變數,設為4可觀察內建函式調用.
unknowns 為"keep","comment", "remove" (預設)三者之一.決定了在輸出環節上如何處理模板中未完成處理的變數名稱.如果設為"keep",這些變數名稱將原封不動的保留下來.如果設為"comment",那麼會在報錯的同時,將未完成處理的變數名
稱全部轉換成HTML的注釋.如果設為"remove",未完成處理的變數名稱便會被悄然刪除(這也是預設的情況).
halt_on_error = "yes" 為"yes"(預設), "report", "no"三者之一. 決定了模板類錯誤處理方式.如設為"yes"(預設),錯誤就會被報告,程式執行也隨之中斷. 如果設為"report",錯誤同樣會被報告,只是程式繼續執行,並返回"false".如果設為"no",錯誤就被屏蔽掉,程式執行結果返回"false"
last_error = "" 最近的一次錯誤資訊儲存在這個變數裡面.

內部執行個體變數

file 字串散列.一個轉換表,可以把變數名轉換成與之相對應的檔案名稱.
root 字串 (路徑名). 模板檔案被載入的主目錄.
varkeys 字串散列.一個轉換表,可以把變數名轉換成與之相對應的Regex.
varvals 字串散列.一個轉換表,可以把變數名轉換成它們各自的varkey對應的替代值.

模板類執行個體方法

可調用執行個體方法

Template($root = ".", $unknowns = "remove")

建構函式.可以有兩個可選的參數.第一歌參數設定模板所在目錄,第二個參數設定未知變數的處理方式.

set_root($root)

該函數檢查$root是否為一個有效目錄,然後把這個模板存放所在目錄設為矚目路.

set_unknowns($unknowns = "remove")

該函數設定未處理的變數名稱的處理方式.必須是"remove","comment"或"keep"三者中的一個. 如果設為"keep",這些變數名稱將原封不動的保留下來.如果設為"comment",那麼會在報錯的同時,將未完成處理的變數名稱全部轉換成HTML的注釋.如果設為"remove",未完成處理的變數名稱便會被悄悄的刪除(這是預設的情況).

set_file($varname, $filename = "")

該函數為一個函數的初值定義一個檔案名稱,可以用一個$varname/$filename對或者一系列的$varname/$filename對來調用它.這些檔案只有在需要時才會被載入.

set_block($parent, $varname, $name = "")

變數$parent可包含一個以$varname命名的變數塊.該函數會從$parent中把這個塊刪除,然後用一個名稱為$name的變數代替它.如果$name被忽略了,那麼它將被假定為和$varname一樣

set_var($varname, $value = "")

該函數設定一個變數的初值.可以用一個$varname/$value對或者一系列的$varname/$value對來調用它.

subst($varname)

該函數返回一個名為$varname的變數的值,所有以定義變數的值都已經填入.結果字串並不是最終結果,而是未完全處理變數的處理還沒有應用前的結果.

psubst($varname)

這個是print $this->subst($varname)的簡寫形式.

parse($target, $varname, $append = false)

該函數替代以$varname為名中的所有已定義變數的值,並儲存或附加在以$target為變數名的結果中.

如果$varname為變數名數組,$append就會被屏蔽.以$varname為名的變數被連續的替代,每一個替代步驟的結果都存在$target裡.最終的替代結果
可在以$target為名的變數裡獲得,可以視為下一個$varname的一個中間處理環節.

pparse($target, $varname, $append = false)

這個是print $this->parse(...). 的簡寫形式

get_vars()

返回所有以定義值的序列,每個值都以其名字為鍵.

query_id()

返回以$varname命名的變數的值.如果$varname對應著一個檔案,而且檔案尚未載入,就會報告變數為空白.當用變數名稱數組調用時,會返回一個值的序列,以它們的名字為鍵.

get_undefined($varname)

該函數以$varname,名稱未鍵的方式,返回一系列未處理變數名稱(即一個含$a[$name]=$name的序列).

finish($str)

該函數將返回$str的最終版本,即針對未完全處理的處理方式將應用到$str上來.

p($varname)

該函數將輸出以$varname命名的變數的最後版本的值.

get($varname)

該函數將得到以$varname命名的變數的最後版本的值.

haltmsg($msg)

該函數可以在你的模板子類中被覆寫.它可以輸出用來調用的資訊.


內部執行個體方法

filename($filename)

當用一個相對路徑調用時,函數返回一個路徑名,附帶從$this->root中提取的合適的目錄名.如果是絕對路徑,則不加變化即被使用.

結果檔案名必須是存在的,否則就會長生一個錯誤.

varname($varname)

該函數根據所給的變數名稱構造一個變數名稱運算式(譯註:即 var -> {var}).

loadfile($varname)

如果一個變數未定義或者為空白,並且對應一個檔案,對應著的這個檔案就會被載入,檔案內容將被賦為該變數的值.

halt($msg)

無論何時發生了一個錯誤,這個函數都將被喚起,並根據 $this->halt_on_error定義的方式處理這個錯誤.


模板類應用執行個體

該模板類管理一些變數的集合,都為文本字串.這些字串可能以 {變數}的形式包含其他變數的引用.當分析或替換時,一個變數的引用就會被那個變數的值所替代.例如,如果你這樣

<?php
$t = new Template;

$t->set_var("a", "defined as hugo");
$t->set_var("b", "the value of a is {a}");

print $t->subst("b")
?>

將輸出"the value of a is defined as hugo".

一個變數的值可以以手工調用set_var('名稱", "值");的方式定義,或者可能調用set_file("名稱","filename.ihtml");從一個檔案中定義.在後一種情況中,當需要時(儘可能晚)檔案內容就被載入,並被設定為變數的值.

第三種定義變數值的方式是調用set_block("parent", "block", "name");.這種情況下,以"parent"為名的變數被當作以<!-- BEGIN block -->為開始,以<!-- END block -->為結束的塊被尋找.字串從變數"parent"中被刪除,賦給以"block"為名的變數.在"parent"裡的"name"對應的變數引用被替代了.如果可選項"name"
留空,"block"將被用於替代.

例如,如果這樣寫

<?php
$t = new Template;

$t->set_var("a", "front matter

<!-- BEGIN b -->
this is block b
<!-- END b -->

end matter");
$t->set_block("a", "b", "bb");
?>

會把變數"a"定義為"front matter {bb} end matter",變數"b"則作為一個塊.這一切使得當你在下例中設定內部變數debug為7時,跟蹤變數訪問情況變得更加清晰.

直接使用模板類或者如有需要的話,定義一個模板類的子類.

象下面一樣定義一個名為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<br>{UNDEFINED_VARIABLE}</td>
</tr>
</table>
</body>
</html>

這個檔案包含一個對應變數PAGETITLET的引用和一個以OUT命名的引用.另外一個以UNDEFINED_VARIABLE為名的變數的引用不作解析.另外一個模板檔案,命名為box.ihtml,包含一個名為row的塊,含有三個變數引用. {TITLE}, {NUM} 和{BIGNUM}:

<!-- 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 -->

下面的php檔案示範如何使用這些模板:

<?php
/* 引入模板類 */
include("template.inc");

/* 用需要的參數產生模板類的一個執行個體對象 */
$t = new Template("/home/kris/www/test.koehntopp.de/pages/template", "keep");
/* $t->debug = 7; */ /* 啟用全部調試 */

/* 從檔案中定義兩個變數 */
$t->set_file(array(
"page" => "page.ihtml",
"box" => "box.ihtml"));

/* 定義包含在另一個變數裡面的變數 */
$t->set_block("box", "row", "rows");

/* 手動定義兩個變數 */
$t->set_var(array("TITLE" => "Testseite",
"PAGETITLE" => "hugo"));

for ($i=1; $i<=3; $i++) {
$n = $i;
$nn = $i*10;

/* 給NUM和BIGNUM賦值 */
$t->set_var(array("NUM" => $n, "BIGNUM" => $nn));

/* 替換row中的NUM和BIGNUM
* 把結果附加到rows */
$t->parse("rows", "row", true);
}

/* 替換box裡的所有變數,
結果儲存在OUT裡面 */
$t->parse("OUT", array("box", "page"));

/* 列印OUT*/
$t->p("OUT");
?>

<hr>
輸出未定義變數:
<?php
print @implode(", ", $t->get_undefined("OUT"));
?>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.