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

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

  • <strong id="5koa6"></strong>
  • 在Perl/CGI中使用模板

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    編者按:如果你不打算使你的網絡應用系統出現混亂,那么就在Perl/CGI腳本中使用HTML模板吧,這樣可避免大量冗余HTML代碼的出現。 大部分網絡應用程序中用了很多HTML代碼。象Hotmail這樣的基于web的電子郵件系統,其中的登錄屏幕、郵箱、發送信息、文件夾、菜
    <編者按:如果你不打算使你的網絡應用系統出現混亂,那么就在Perl/CGI腳本中使用HTML模板吧,這樣可避免大量冗余HTML代碼的出現。>

    大部分網絡應用程序中用了很多HTML代碼。象Hotmail這樣的基于web的電子郵件系統,其中的登錄屏幕、郵箱、發送信息、文件夾、菜單條、設置選項和其它欄目都使用了HTML代碼。

    網絡程序是可以使用HTML的,但問題是HTML出現的地方太多,程序的每個需要顯示的部分都需要設計HTML頁面。這些HTML代碼出現在哪里呢?就在你的Perl源碼中。這就意味著在你的程序中,將會插入數千行的HTML代碼,你的perl程序將會變得很難調試,在調試HTML的屏幕顯示時,也是困難重重,要是此時再換個其他人來編輯HTML,就更是雪上加霜,不用提有多混亂了。解決這些問題的辦法是:把HTML代碼放到后綴為“.HTML”的文件中去,作為模板,然后,在所寫的Perl/CGI 程序中,使用這些HTML模板文件。
    為所有的那些HTML找一個新家
    組織你的HTML模板的最好方法,就是讓它們盡量靠近你的程序的存放目錄。(要么同你的程序一起都放在同一目錄中,要么把模板文件放在名為“/templates/”的子目錄中。) 另外,在你給模板文件命名時,盡量取些描述性強的名字。我通常的命名方法是:下劃線后面緊跟程序名,目的是用來區分常規的HTML文件和HTML模板。

    例如,如果要創建基于Web的電子郵件程序“Web Mail”,我們的模板就這樣命名:

    _webmail_login.html # 登錄

    _webmail_message_list.html # 顯示信件

    _webmail_message_read.html # 閱讀信件

    _webmail_message_send.html # 創建/發送信件

    _webmail_message_erase.html # 刪除信件

    _webmail_message_erase_confirm.html # 確認刪除

    _webmail_logoff.html # 退出

    一看文件名,我們就很容易知道該文件是做什么的。一段時間以后,回過頭來再作修改時,也不會搞錯。如果你是同其他網絡開發者協同工作,也不用擔心他們在修改時會把程序搞亂。
    現在,我們開始著手把所有的HTML從Perl/CGI程序中移出去,放到HTML模板文件中,然后,還需要有個辦法把它們顯示出來。所以,我們將編制一個稱為&Template的Perl子程序,程序代碼如下:

    sub Template {

    local(*FILE);# filehandle

    local($file);# file path

    local($HTML);# HTML data

     

    $file = $_[0] || die "Template : No template file specified\n";

     

    open(FILE, "<$file") || die "Template : Couldn't open $file : $!\n";

    while (<FILE>) { $HTML .= $_; }

    close(FILE);

     

    $HTML =~ s/\$(\w+)/${$1}/g;

     

    return $HTML;

    }

    該程序中的大部分語句很簡單,我們只是打開了一個模板文件,把其內容讀出,并返回給程序。所用的技巧是使用了下面的正則表達式,它是用來搜索HTML模板中的Perl變量, (如:“$date”) 把變量的值取代其符號表示。

    $HTML =~ s/\$(\w+)/${$1}/g;

    其工作原理是這樣的:正則表達式搜索以“$”開頭的變量名,“\w”表示字符(a-z,A-Z,0-9 或下劃線),“+”意味著一個或多個字符?!癨w+”兩邊的括號表示要把匹配的變量名存到“$1”中,最后, “${$1}”計算出變量的值。記住,變量名存放在$1中。下面為例子:

    ### 顯示登錄屏幕

    print "Content-type: text/html\n\n";

    print &Template("_webmail_login.html");

    這樣,盡管HTML是存放在模板中,并不在你的程序里,變量值也可以算出來。

    復雜的模板和HTML段
    在某些場合,僅僅使用單一的模板還不能完成相應的任務,如在使用搜索引擎時,搜索結果往往情況各異,又比如,在做天氣預報的網頁時,你會根據預報的結果,來選擇相應的圖像和文本顯示。在這些場合,你可以使用多個模板文件來構成顯示屏幕。例如,你可以把下面的搜索結果放在頁面抬頭和腳注之間:

    _search_results_header.htmlf # 頁面抬頭

    _search_results_result.htmlf # 結果行

    _search_results_footer.htmlf # 頁面腳注

    上面的每個部分被稱為HTML片斷,因為它僅是一個完整的HTML頁中的一部分。我們把HTML片斷文件的后綴規定為“.htmlf”,這就可以同完整的HTML文件區分開來。通過把HTML網頁分解成HTML片斷,你就可以在屏幕上顯示出任何數量的搜索結果。

    print &Template("_search_results_header.htmlf");

    foreach $result (@results) {

    print &Template("_search_results_result.htmlf");

    }

    print &Template("_search_results_footer.htmlf");

    在我們天氣預報的例子中,也可以使用HTML片斷。同前面的例子相比,所不同的是,HTML片斷并不是一個接一個地顯示在屏幕上,而是在另外一個網頁中根據需要,加載相應的HTML片斷。比方說吧,我們的天氣預報的主文件模板為_weather.html,我們打算把未來三天的天氣預報插入到主HTML網頁上,我們引入變量“$day1 $day2 $day3”,對每一種可能的天氣情況,我們創建一個小的HTML片斷文件,然后,根據需要,進行加載。

    ### Load HTML fragments for weather forecast

    $day1 = &Template("_weather_sunny.htmlf");

    $day2 = &Template("_weather_cloudy.htmlf");

    $day3 = &Template("_weather_snowing.htmlf");

    print &Template("_weather.html");

    在HTML文件中,對于變量的表示方法,對于程序員來說是很熟悉的。(如,“Today is $date”)。然而有些人則認為,如果使用其它符號來標識變量,而不是用“$”符號,感覺更容易些。即使你是第一次考慮用模板來代替程序行中的HTML代碼,此時你也僅需作很少的修改,就可以在程序中使用象“%variable%” ,“ __variable__”或采用其它你覺得有意義的符號。我認為通過使用模板,要作這些小修改不是很難的。

    本文作者Dave Edis是Edis Digital公司的總裁,其公司位于加拿大,提供網絡媒體的解決方案。Edis Digital公司為世界各地的用戶開發基于Web的出版工具和應用程序。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品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>