精品人妻无码一区二区三区软件 ,麻豆亚洲AV成人无码久久精品,成人欧美一区二区三区视频,免费av毛片不卡无码

您現(xiàn)在的位置是:首頁計算機應(yīng)用論文

PHPLIB Template入門系列 - 4 模板嵌套

發(fā)布時間: 1

在PHP程序里,我們常常會把"公用代碼"或"公用部分"寫進(jìn)一個文件里,前者象我們的系統(tǒng)配置文件,比如config.php,或者公共函數(shù)都寫入一個functions.php文件里;后者象一個站點都需要用到的頁面頭部,尾部.這樣做的好處是可以很方便的維護站點,而如果這個公用部分要有所改動,無需再去改每一個頁面,大大減少了我們的工作量.

PHPLIB Template入門系列 - 4 模板嵌套
【樓 主】
在PHP程序里,我們常常會把"公用代碼"或"公用部分"寫進(jìn)一個文件里,前者象我們的系統(tǒng)配置文件,比如config.php,或者公共函數(shù)都寫入一個functions.php文件里;后者象一個站點都需要用到的頁面頭部,尾部.這樣做的好處是可以很方便的維護站點,而如果這個公用部分要有所改動,無需再去改每一個頁面,大大減少了我們的工作量.
以前你或許用require,include(require_once,include_once)引進(jìn)一個公用的頁面頭部,確實方便而有效,現(xiàn)在我們用Template模板類也可以實現(xiàn)了,并且可以很方便的把一個頁面隨意插入另一個模板的任意地方.如果你想也把要插進(jìn)的頁面做成含有變量的模板的話,那么你會發(fā)現(xiàn)模板類會把這個工作處理的很好.

在template目錄下新建三個文件third.html,header.html,footer.html.內(nèi)容分為如下
third.html
<!-- 這是頁面頭部 -->

<BODY>
下面是一個列表
<UL>
<!-- BEGIN list -->
<li> 的成績是
<!-- END list -->
</UL>
<!-- 這是頁面腳部 -->

</BODY>
</HTML>

header.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> </TITLE>
</HEAD>

footer.html
<P>author © iwind

你也看到了,我們前幾節(jié)的例子中都是用
$tpl->set_file("main", "模板文件名");
來加載模板文件的。只所以命名為"main",是因為我們想給它一個意義:主模板。這里的third.html就可以稱之為“主模板”,而欲嵌入主模板third.html的變量所在位置的模板文件header.html,則可以稱為"子模板".同樣footer.html也是一個"子模板",我們想把它放到主模板里的位置.一個主模板內(nèi)可以隨意嵌入不限內(nèi)容,尺寸大小,格式等的任何多個子模板.

下面我們開始我們的PHP程序.

先是創(chuàng)建一個類的實例對象
//包含進(jìn)模板類 template.inc
require "inc/template.inc";

//創(chuàng)建一個實例
$tpl = new Template("template");

//讀進(jìn)三個模板文件的內(nèi)容,分別給變量"main", "my_header", "my_footer"
$tpl->set_file("main", "third.html");
$tpl->set_file("my_header", "header.html");
$tpl->set_file("my_footer", "footer.html");

//執(zhí)行my_header,my_footer里的模板變量替換,并把最終結(jié)果分別賦給主模板中的header,footer
$tpl->parse("header", "my_header");
$tpl->parse("footer", "my_footer");

//然后完成主模板內(nèi)變量的替換,并輸出主模板分析后的內(nèi)容
$tpl->parse("mains", "main");

//輸出
$tpl->p("mains");

于是,我們便可以通過查看源文件確信header.html,footer.html兩個子模板文件的內(nèi)容已經(jīng)被加進(jìn)主模板里了.

<!-- 這是頁面頭部 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> </TITLE>
</HEAD>
<BODY>
下面是一個列表
<UL>
<!-- BEGIN list -->
<li> 的成績是
<!-- END list -->
</UL>
<!-- 這是頁面腳部 -->
<P>author © iwind
</BODY>
</HTML>

你會發(fā)現(xiàn),所有的變量都沒了,包括我們未賦值的,,.這是因為我們在創(chuàng)建對象時,第二個參數(shù)未設(shè)置,而自動采用了"remove"
$tpl = new Template("template");

$tpl = new Template("template", "remove");
的效果是一樣的.

如果我們想給這些變量也賦值,那么方法和單個模板里變量的分析方法是一樣的.
//讀模板內(nèi)容進(jìn)變量
$tpl->set_file("main", "third.html");
$tpl->set_file("my_header", "header.html");
$tpl->set_file("my_footer", "footer.html");

//設(shè)置子模板header.html里的變量title的值
$tpl->set_var("title", "這個是網(wǎng)頁標(biāo)題");

//以下分析主模板里的塊的內(nèi)容
//設(shè)置塊
$tpl->set_block("main", "list", "lists");
$array = array("張三" => 82, "李四" => 90, "王二" => 60, "麻子" => 77);
foreach ($array as $username=>$score)
{
    $tpl->set_var("username", $username);
    $tpl->set_var("score", $score);
    $tpl->parse("lists", "list", true);
}

所有程序為
<?php
//包含進(jìn)模板類 template.inc
require "inc/template.inc";

//創(chuàng)建一個實例
$tpl = new Template("template");

//將整個文件讀進(jìn)來
$tpl->set_file("main", "third.html");
$tpl->set_file("my_header", "header.html");
$tpl->set_file("my_footer", "footer.html");

//設(shè)置header.html里的變量title的值
$tpl->set_var("title", "這個是網(wǎng)頁標(biāo)題");

//設(shè)置塊
$tpl->set_block("main", "list", "lists");
$array = array("張三" => 82, "李四" => 90, "王二" => 60, "麻子" => 77);
foreach ($array as $username=>$score)
{
$tpl->set_var("username", $username);
$tpl->set_var("score", $score);
$tpl->parse("lists", "list", true);
}

//執(zhí)行my_header,my_footer里的模板變量替換,并把最終結(jié)果分別賦給主模板中的header,footer
$tpl->parse("header", "my_header");
$tpl->parse("footer", "my_footer");

//完成主模板內(nèi)變量的替換
$tpl->parse("mains", "main");

//輸出
$tpl->p("mains");

?>

輸出的結(jié)果為
<!-- 這是頁面頭部 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> 這個是網(wǎng)頁標(biāo)題 </TITLE>
</HEAD>
<BODY>
下面是一個列表
<UL>

<li>張三 的成績是 82
<li>李四 的成績是 90
<li>王二 的成績是 60
<li>麻子 的成績是 77
</UL>
<!-- 這是頁面腳部 -->
<P>author © iwind
</BODY>
</HTML>

一切都是我們所期望的.

在這個程序里,我們用
$tpl->set_block("main", "list", "lists");
加載一個塊.其實它的第一個參數(shù)為該塊所在父變量,如果這個塊在header.html里,那么恐怕要這樣寫了
$tpl->set_block("my_header", "list", "lists");
但分析方法還是一樣的.

從以往和這節(jié)中的例子,我們可以看出來,定義一個模板變量值的方法是用
$tpl->set_var("var_name", "var_value");
但把一個變量的值給另一個變量就需要用parse.
$tpl->parse("target_name", "from_name", true);
或者
$tpl->parse("target_name", "from_name", false);
使用parse就先執(zhí)行from_name大變量的模板變量的替換,然后再把所得結(jié)果賦給target_name.

一個變量無論在模板的何處(塊里面,子模板里),定義的方法都是一樣的.

子模板里還可以嵌入新的子模板,稱之為"多重嵌套",分析的方法都是一樣的,只是一般用不到.塊也可以多重嵌套,而且非常有用,使得模板可以設(shè)計的可以很清晰,這就是我們下一節(jié)的內(nèi)容了.


轉(zhuǎn)載請注明來自:http://www.jinnzone.com/jisuanjiyingyonglw/155.html