• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    模板,PHPLIB處理方式

    發布: 2007-7-14 19:53 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 8次 | 進入軟件測試論壇討論

    領測軟件測試網


    如果你正想知道什么是模板,首先去看一下Sascha Schumann寫的精彩文章《模板-為什么和如何在PHP3中使用它們(Templates - why and how to use them in PHP3)》的前幾段。

       一般來說,模板可以讓你完全地把你的PHP代碼從HTML中分離出來,這樣使得HTML的圖形設計者們非常高興,而且可以避免他們搞丟你的寶貴設計。

    它不是FastTemplates
       那么,我們真的需要在PHPBuilder上關于模板的另一篇文章嗎?好,是的,因為有不止一種的方法用PHP來實現模板。Sascha的文章講述了如何使用FastTEmplates,但是PHP基本類庫("PHPLIB")有它自已的模板實
    現。

      它們有什么不同呢?FastTemplates最初是從一個Perl庫轉變來的。FastTemplates對Perl程序工作的很好,但是對PHP不太理想。Kristian Koehntopp從頭編寫了PHPLIB模板,作為一個純的PHP庫,它更好地提供了PHP的優勢。好處之一是Kristian的設計使用了preg_replace()來分析模板,據說比FastTemplate 中使用的ereg_replace()要快。PHPLIB模板的另一個好處是它允許動態的塊實現嵌套,不象FastTemplates。

      兩個庫都有著非常相似的特性和能力,但是如果你已經使用了FastTemplates,并且你想學習使用PHPLIB模板,你應該把你所知道的關于FastTemplates 的一切都忘掉。他們的特性可能是相似的,但是PHPLIB模板所做的每件事比FastTemplates只有一點點不同。

    使用PHPLIB模板
       讓我們從一個簡單的例子開始。我們假設在/home/mydir/mytemplates/下面有一個名為MyTemplate的模板,它有一些文本,內容可能是:

    祝賀!你贏了一輛{some_color}Honda Prelude!

      注意"{some_color}"是用大括號包圍的。大括號指明some_color是一個模板變量。我們可能想寫這樣一個腳本,它可以裝入模板,在{some_color}模板變量的地方插入PHP變量$my_color的值,然后輸出新的文本。如果$my_color碰巧被設為"藍色",最后的輸出可能是:

    祝賀!你贏了一輛新藍色Honda Prelude!

    下面是上述結果的PHP腳本: <?php
    include "template.inc";

    $my_color = "blue";
    // 將在后面使用

    $t = new Template("/home/mydir/mytemplates/");
    // 創建一個名為 $t 的模板對象

    $t->set_file("MyFileHandle","MyTemplate.ihtml");
    // 設置 MyFileHandle = 我們的模板文件

    $t->set_var("some_color",$my_color);
    // 設置模板變量 some_color = $my_color值

    $t->parse("MyOutput","MyFileHandle");
    // 設置模板變量 MyOutput = 分析后的文件

    $t->p("MyOutput");
    // 輸出 MyOutput 的值(我們的分析后的數據)
    ?>
       第一行是一個include 指令,用來提供PHPLIB模板功能。當然PHPLIB做的比模板要多,但是如果你只想使用模板特性,只需要包括tmplate.inc (template.inc是來自于PHPLIB的文件之一)。PHPLIB模板使用面向對象程序設計,所以下一件事情就是創建一個模板對象。代碼 <?php $t = new Template (
    "/home/mydir/mytemplates/" ); ?>
    創建一個新的模板對象$t。這個$t對象是一個句柄,將用來處理所有的模板函數,用于PHP腳本中其它的代碼。如果你愿意,你可能創建其它的模板對象(每一個都有著自已的模板變量名字空間),但是一個就夠用了。在模板的構造函數調用中的路徑("/home/mydir/mytemplates/")用來設置你的模板所在位置的根目錄,但是如果你沒有設它,它將缺省與你的PHP腳本所在目錄一樣。

      然后我們調用set_file()來定義一個名為"MyFileHandle"的句柄來與MyTemplate.ihtml鏈接(在parse()被調用之前,模板不會真正地裝入)。順便說一下,PHPLIB模板的模板文件名的后綴為.ihtml 是一種習慣,你可以使用.html,.tpl,或其它的后綴。然后調用set_var()來設置模板變量some_color為$my_color的值(值為"藍色"),意味著所有在模板中出現{some_color}的地方都將被詞"藍色"所替換,一旦我們調用了parse()。接著我們調用parse(),它會裝入MyFileHandle(MyTemplate.ihtml)進行分析,并且替換所有模板變量("{某變量}")為模板變量的值,分析的結果放在MyOutput中。任何結果都不會輸出到web服務器上,除非 p("MyOutput")被調用,它將輸出最后分析過的文本。

    嵌套的模板

      parse()函數的一個靈巧的特性是它創建的MyOutput句柄是一個真正的模板變量,就象some_color 是一
    個模板變量。所以如果你有另一個模板,它有一個{MyOutput}標簽,當你分析第二個模板時,所有的
    {MyOutput}標記將被替換為MyOutput中的分析后的文本。這個特性允許你將一個模板文件嵌入到另一個模板
    中。所以,我們可能有另一個名為wholePage.ihtml的模板,內容如下:

    對不起,你沒贏。但是如果你贏了,我們將對你說:
    {MyOutput}

      并且在wholePage.ihtml被分析后,最后的結果將是:

    對不起,你沒贏。但是如果你贏了,我們將對你說:
    祝賀!你贏了一輛新藍色Honda Prelude!

      下面是分析兩個模板的PHP代碼:

    <?php

    $t = new Template("/home/mydir/mytemplates/");

    // 這三行同第一個例子一樣
    $t->set_file("MyFileHandle","MyTemplate.ihtml");
    $t->set_var("some_color",$my_color);
    $t->parse("MyOutput","MyFileHandle");

    // 注意我們沒有調用p()
    // 這里,仍然沒有輸出任何東西

    // 現在分析第二個模板
    $t->set_file("WholeHandle","wholePage.ihtml");

    // wholePage.ihtml 有 "{MyOutput}" 在里面
    $t->parse("MyFinalOutput","WholeHandle");

    // 所有的 {MyOutput} 被替換了
    $t->p("MyFinalOutput");
    // 輸出 MyFinalOutput 的值

    ?>
      最后調用了parse()和p()的兩行語句可以合并成一個簡寫函數pparse():

    pparse("MyFinalOutput","SecondHandle");
       另一個PHPLIB模板的特性是set_file()和set_var()函數也能一次接收多組值,通過傳遞一個句柄/數組對數組。這是一個例子:
    <?php
    $t->set_file(array( "pageOneHandle" => "pageone.ihtml",
    "pageTwoHandle" => "pagetwo.ihtml"));
    $t->set_var(array( "last_name" => "Gates",
    "first_name" => "Bill",
    ".net_worth" => $reallybignumber));
    ?>
    添加模板文本

      你可以給parse()和pparse()傳遞第三個參數,如果你想給模板變量追加數據而不是替換它?梢院唵蔚氖褂胻rue作為第三個參數調用parse()和pparse(),如: <?php
    $t->parse("MyOutput","MyFileHandle", true);
    ?>
       如果MyOutput已經包含了數據,MyFileHandle將被分析并且被追加到MyOutput已經存在的數據上。這個技術非常有用,如果你已經有了一個模板,你想要同一段文本被重復多次,例如列出一個數據庫查詢結果中的多行。你也可能是顯示數組中的變量,如下面的例子:
    <?php
    $t = new Template("/home/mydir/mytemplates/"); $t->set_file(array("mainpage" => "mainpage.ihtml", "each_element" => "each_element.ihtml"));reset($myArray);while (list($elementName, $elementValue) = each($myArray)) {
    // 設置 'value' 和 'name' 為每一個元素的值和名字
    $t->set_var("name",$elementName); $t->set_var("value",$elementValue);
    // 追加each_element的拷貝
    $t->parse("array_elements","each_element",true);}$t->pparse("output","mainpage");?>
       這個例子使用了兩個模板,mainpage.ihtml和each_element.ihtml。mainpage.ihtml模板可能是這樣:

    Here is the array:

    {array_elements}

     上面的{array_elements}標簽將被each_element.ihtml的拷貝所替換,它將根據數組($myArray)進行重復。each_element.ihtml模板看上去可能是:

    {name}: {value}

      處理結果是一個包含$myArray元素的格式化很好的表格。但是如果將兩個模板合并成一個模板不是更好嗎?實際上,它們可以使用模板塊來合并使用。模板塊允許從一個模板中取出一塊文本,所以你可以重復很多次,或者在它上面做任何你想做的事情。但是我將在另一篇文章講述這個特性。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>