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

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

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

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

    PHP-Web應用程序開發:使用模板

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

    領測軟件測試網


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

    1 模板處理類的設計
    模板處理類主要需完成以下的任務:
    ·從模板文件中讀取顯示用的HTML代碼。
    ·將模板文件和實際生成的數據結合,生成輸出的結果。
    ·允許同時處理多個模板。
    ·允許模板的嵌套。
    ·允許對模板中的某個單獨的部分進行處理。

    歸納上述任務,模板類的設計目標為:從多個模板文件中讀入顯示的HTML代碼,將這些顯示代碼中需要動態數據的地方替換為PHP程序運算所得出的數據,然后按照一定的順序輸出。其中,替換的部分可以自由的設定。

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

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

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

    <html>
    <head>
    <title>使用模板的測試</title>
    </head>
    <body>
    <h2>這是一個使用模板的測試文件!</h2>
    當前的時間是{currenttime}!
    </body>
    </html>
    注:模板文件和通常的HTML文件差不多,唯一不同的是使用“{}”括起來的是可以被模板處理類替換的動態內容的變量。

    接下來使用模板處理類來處理上面的模板:
    <?
    //引入Template類
    include("template.inc");

    //得到需要替換的數據
    $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);

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

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

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

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

    # 建立包含模板文件的數組
    $t->set_file(array(
    "page" => "page.ihtml",
    "box" => "box.ihtml"));

    # 載入模板文件box中的一個塊row,引用名稱為rows
    $t->set_block("box", "row", "rows");

    # 設置替換
    $t->set_var(array("TITLE" => "Testpage",
    "PAGETITLE" => "hugo"));

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

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

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

    注:這里page.ihtml模板文件中變量的命名與最后的輸出句柄都用了“OUT”。
    循環取值部分采用數據庫類,即可將數據的生成與數據庫應用結合起來。
    執行結果如下圖:

     

    模板嵌套與塊設定執行結果圖

    4 小結
    本文主要簡要介紹了PHPLIB中Template類的設計、實現及使用方法。當然,還有許多其他的PHP模板方案,如由Perl中演化而來的FastTemplates。目前Inte.net小組采用的是另一種方案,主要的實現方式是模板文件入庫,采用eval來實現數據與模板文件的結合等,相對來說模板文件的管理與模板處理的使用比較簡潔,但缺少文件存放的模式。本人目前在做的一些嘗試是將兩者結合起來,并想在PHPLIB的Template類的基礎上進行改進。初步的目標任務有兩個:1、在讀取模板文件時擴展其對數據庫的支持,這樣可以在必要時增強靈活性與使用數據庫管理工具 2、化簡模板文件與數據的結合,因為在實際使用中大多數情況下無需將模板文件中的變量在處理程序中再設置(數據變量映射)一遍。
    在此也希望讀者、PHP程序愛好者一起參與進來,多提寶貴意見,祝好運!

    延伸閱讀

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


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