使用PHP4中的 IntegratedTemplate類實現BLOCK功能 (轉)

gugu99發表於2007-10-30
使用PHP4中的 IntegratedTemplate類實現BLOCK功能 (轉)[@more@]

使用4中的 IntegratedTemplate類實現BLOCK功能

 關鍵字:PHP4,template,模板,IntegratedTemplateExtension,block
 讀者要求:瞭解PHP4 的模板概念

 使用PHP 模板類進行很有好處,但是有時也會碰到一個問題,比如說輸出一個表格,但是表格行數要到執行的時候才知道,如留言板、BBS、購物網站之類,經常會碰到這個問題。這時做美工的人無法決定在HTML中用幾行表格,如果在PHP程式碼檔案中寫迴圈輸出,又會讓美工、PHP員看程式碼都不方便,美工的人會說,這裡的表格哪裡去了?我要修改表格的顏色背景之類怎麼辦?PHP程式設計師也會說,怎麼這裡突然有一個

、,做什麼用?會嵌在HTML檔案哪裡?。
 使用PHP模板類程式設計一般把這種不確定個數的HTML 元素當成一個“ block ”,對 bolck 的程式設計類似於在程式碼中寫一個迴圈。在比較常用的PHP模板類(如 FastTemplate 和 PHPLib )都有這種功能。寫巢狀的block 類似於寫多重迴圈。現在舉例說明在 PHP4 裡面的 IntegratedTemplateExtension 類中block 的程式設計方法,例子中用的是兩重迴圈,外層block 是GoodsList,裡層block 是GoodsListOmeType 。
 基本設定:假設我們寫的程式碼放在C:TestPHPPHP4GoodsList.htm 和 C:TestPHPHTMLGoodsList.php 中。將C:TestPHPPHP4 在 Server 上設成虛擬目錄 /testphp 並且給與指令碼,確認C:TestPHPHTMLGoodsList.htm 無法透過遠端訪問。假定PHP4在C:php4,在 php.ini 裡面設定 include_path = ".;C:php4pear"

 以下是GoodsList.htm的內容:

 



購物袋裡的商品清單






 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 <!-- BEGIN GoodsList --&gt <!-- 說明: block 商品列表開始 --&gt
 
 
 
 
 
 
 
 <!-- BEGIN GoodsListOfSomeType --&gt <!-- 說明: block 某一類商品列表開始 --&gt
 
 
 
 
 
 
 
 <!-- END GoodsListOfSomeType --&gt <!-- 說明: block 某一類商品列表結束 --&gt
 <!-- END GoodsList --&gt <!-- 說明: block 商品列表結束 --&gt
 
 
 
 

 
{UserName},您的購物袋裡有以下商品:

 

 

 
 商品種類商品名稱商品價格 
 {Type}   
  {GoodsName}{Price} 
 

 




   


 以下是PHP4程式碼檔案 GoodsList.php

  require_once "HTML/ITX.php";

//以下是給變數賦值,在實際程式碼中可能從Database中取得資料然後賦值
$UserName = "皮皮魯";
$GoodsTypeArray = array("家電", "書籍");
$GoodsNameArray = array(array("三星顯示器", "Sony單放機","長虹彩電"),
 array("C++ 程式設計思想", " 2 高階開發指南", " 5 高階開發指南",
 "Flash 4 快閃勁爆網頁", "設計可複用面向的基礎" ));
$GoodsPriceArray = array(array(1024, 302, 1024),
 array(35, 62, 76, 66.5, 55 ));

//一般來說這種全域性變數放在單獨的一個檔案中,便於維護
$HTML_CODE_FILE_ = "../HTML/";

$tpl = new IntegratedTemplateExtension($HTML_CODE_FILE_ROOT);

//指定要替換 tag 的 HTML 檔案
$tpl->loadTemplatefile("GoodsList.htm");

$tpl->setVariable("UserName",$UserName); //名稱

//指定外層 block 名稱
$tpl->setCurrentBlock("GoodsList");

//我喜歡在迴圈前將迴圈次數單獨賦值
$GoodsTypeCount = count($GoodsTypeArray);

//對外層block 進行迴圈
for ($i = 0 ; $i < $GoodsTypeCount ; $i++)
{
 $tpl->setVariable("Type",$GoodsTypeArray[$i]); //貨物種類

 //指定裡層block 名稱
 $tpl->setCurrentBlock("GoodsListOfSomeType");

 $GoodsNameArrayCount = count( $GoodsNameArray[$i] );

 //對裡層block 進行迴圈
 for($j = 0; $j < $GoodsNameArrayCount; $j++ )
 {
 //替換HTML 檔案中的 tag
 $tpl->setVariable(array ("GoodsName" =>$GoodsNameArray[$i][$j],
 "Price" => $GoodsPriceArray[$i][$j]));
 $tpl->parseCurrentBlock(); //這裡也可以寫 $tpl->parse("GoodsListOfSomeType");
 }
 $tpl->parse("GoodsList"); //結束外層 block
}

//輸出替換後的 HTML
$tpl->show();
?>


  執行以後可以看到多重迴圈替換的效果。這樣寫好後, GoodsList.htm 仍然可以使用網頁編輯器如 Dreamweaver、FrontPage 進行編輯, GoodsList.php中是純粹的PHP程式碼,不含HTML,方便以後的程式碼修改和維護。

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-979538/,如需轉載,請註明出處,否則將追究法律責任。

使用PHP4中的 IntegratedTemplate類實現BLOCK功能 (轉)
請登入後發表評論 登入
全部評論

相關文章