程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP3之FastTemplate

PHP3之FastTemplate

編輯:關於PHP編程

當你在建立一個站點的時候,可能不得不面對以下現實: 站點需要一名程序員來設計程序和一名網站設計者來組織頁面。那麼,是否有使兩者很好的結合起來的方法呢? 有的,就是使用模板(FastTemplate:這個程序在本站的“程序和代碼”中可以找到),這將會使你的工作更加輕松。 下面解釋一下使用模板的好處: 1、在很短的時間內可以替換整個站點的外觀 2、使程序員可以抽象編程,而無須接觸HTML代碼 3、速度非常之快 4、可以重復利用以前的模板 模板的來歷:FastTemplate來自於同名的Perl軟件包(在CPAN上可以找到)。 它被移植到了PHP3平台上。你只需要一個基礎類文件class.FastTemplate.php3 先解釋一下使用模板和使用echo或print命令建立html頁面的區別,echo和 print在編寫短小的腳本時顯得非常實用,但是做出來的腳本的組織性和可定制性不好,修改起來頗廢工夫,模板在編寫支持多國語種的站點時的效率則要高的多,如用echo和print可以想象工作量之大。 不用擔心,熟練使用FastTemplate會占去你一部分時間,但是這些時間會在你 以後的工作中彌補回來,尤其是大工程時。 那麼,怎麼使用FastTemplate呢? 第一步,只需使用函數,其中path指向template目錄所在的路徑。這句函數建立了一個$tpl對象,以後可以對它指定參數,進行處理或用來建立各種頁面等等。 FastTemplate是建立在這麼一種理論基礎之上的,即假定一個web頁是由許多小的部分組成的。舉例來說,如WEB頁細分為TITLE、PAGE、FOOT等等。整個頁被賦予一個變量名,每一個小部分又被賦予一個變量名,最小的不可分割的部分通常就是字符串了,它也被賦予一個變量名。具體處理的時候,是一層層的包含關系。被包含部分在上一層中以宏{NAME}的形式出現。最後經過一層層的向上輸出,得到完整的頁面。 那麼最底層的向字符串賦值的函數是什麼呢,就是: assign(NAME, "text"); ?> 通過這個功能,FastTemplate將字符串text賦予了變量NAME,以後上一層就可替換宏{NAME}的內容為text。 例如: $tpl->assign(NAME, "me"); 這就將變量NAME賦值了字符串"me"。 第二步,$tpl需要知道其所調用的所有模板文件,即各個小部分。這個功能由define一個數組實現: define(); ?> 例如: define(array(foo => "foo.tpl", bar => "bar.tpl")); ?> 這說明總共包括了兩個模板文件:foo.tpl和bar.tpl,並給它們指定了名字foo和bar。 有了第一節的知識以後,你現在是否想試一試將模板文件中所包含的宏 {MACROS}部分按照自己定義的變量替換呢?使用以下的命令即可實現: parse(PAGECONTENT, "foo"); ?> 這條命令的具體意義是: 我們首先已經用assign定義了FOO模板中包含的若干宏變量,然後根據這些變量對模板文件FOO進行替換處理,並將替換後的模板文件賦予另一個變量名PAGECONTENT。 完整如下: assign(NAME, "me"); $tpl->parse(PAGECONTENT, "foo"); ?> 當然,我們還沒有作完,因為bar模板文件才是WEB的主輸出部分,BAR模板包含著FOO模板,BAR中還包含著宏變量{PAGETITLE}和{PAGECONTENT}等待處理,PAGECONTENT經過對FOO的處理已經得到,PAGETITLE還未指定,所以還要還要指定PAGETITLE,並調用函數 parse(MAIN, "bar"); ?> 進行處理,並將處理後的結果賦予變量MAIN。 如下: assign(PAGETITLE, "FooBar test"); $tpl->parse(MAIN, "bar"); ?> 很簡單吧,最後我們只需輸出頁面即可: FastPrint(MAIN); ?> 下面就是foo.tpl,bar.tpl與最終的demo.php3文件。 請大家仔細琢磨琢磨: ------------------------------------------------------------- foo.tpl This does not do anything obvious. Please look at {NAME}. ------------------------------------------------------------- bar.tpl Feature world - {PAGETITLE}

{PAGETITLE}

{PAGECONTENT} ------------------------------------------------------------ demo.php3 define(array(foo => "foo.tpl", bar => "bar.tpl")); $tpl->assign(NAME, "me"); $tpl->parse(PAGECONTENT, "foo"); $tpl->assign(PAGETITLE, "Welcome!"); $tpl->parse(MAIN, "bar"); $tpl->FastPrint(MAIN); ?> ------------------------------------------------------------ 編制一個表格的例子: 經過以上的闡述,大家是否已經明白一點了。 下面是一個處理表格的例子,首先我們再學一些新知識。 當我們當處理完foo模板後,並賦予了變量TPL1,我們可以將bar模板的內容處理後追加進TPL1中,這樣就不必定義過多變量,也易於理解,例處理完頁面的title後將content部分追加進去,最後將foot追加,生成完整一個頁面再輸出。這條命令就是: parse(TPL1, ".bar"); ?> 其中的.表示追加。 如下: parse(TPL1, "foo"); # 處理模板bar,並追加進變量TPL1 $tpl->parse(TPL1, ".bar"); ?> 下面是一個完整的表格例子,大家好好揣摸揣摸 page.tpl Feature world - {PAGE_TITLE}

{PAGE_TITLE}

{PAGE_CONTENT} table.tpl name size {TABLE_ROWS} table_row.tpl {FILENAME} {FILESIZE} yad.php3 define( array( page => "page.tpl", table => "table.tpl", table_row => "table_row.tpl" ) ); } function ReadCurrentDirectory() { global $tpl; $handle = opendir( "."); while($filename = readdir($handle)) { $tpl->assign(FILENAME, $filename); $tpl->assign(FILESIZE, filesize($filename)); $tpl->parse(TABLE_ROWS, ".table_row"); } closedir($handle); $tpl->parse(PAGE_CONTENT, "table"); } function PrintPage($title) { global $tpl; $tpl->assign(PAGE_TITLE, $title); $tpl->parse(FINAL, "page"); $tpl->FastPrint(FINAL); } InitializeTemplates(); ReadCurrentDirectory(); Printpage( "Yet Another Demo"); ?> 關於速度的最後一點討論: 看完以上的例子,你會說“太棒了!漂亮,但是,速度怎麼樣呢?” 沒問題,你的站點會變得很快。簡單的說:因為你是一個程序員,你應該關注於程序代碼的設計,代碼應該更加有效率,應容易修改和容易理解。使用FastTemplate可以可以幫助你做到這一點,所以它使你的工作更加輕松一些。 如果你想替代一個已經建好的Web站點,我們建議使用regex(替換表達式)來替換,實際上FastTemplate使用的就是regex 來替換模板中的宏。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved