PHP3之FastTemplate_PHP

來源:互聯網
上載者:User
關鍵字 模板 變數 一個 處理 php tpl-parse
當你在建立一個網站的時候,可能不得不面對以下現實:
網站需要一名程式員來設計程式和一名網站設計者來組織頁面。那麼,是否有使兩者很好的結合起來的方法呢?

有的,就是使用模板(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}部分按照自己定義的變數替換呢?使用以下的命令即可實現:


$tpl->parse(PAGECONTENT, "foo");

?>

這條命令的具體意義是:

我們首先已經用assign定義了FOO模板中包含的若干宏變數,然後根據這些變數對模板檔案FOO進行替換處理,並將替換後的模板檔案賦予另一個變數名PAGECONTENT。

完整如下:


$tpl->assign(NAME, "me");
$tpl->parse(PAGECONTENT, "foo");

?>

當然,我們還沒有作完,因為bar模板檔案才是WEB的主輸出部分,BAR模板包含著FOO模板,BAR中還包含著宏變數{PAGETITLE}和{PAGECONTENT}等待處理,PAGECONTENT經過對FOO的處理已經得到,PAGETITLE還未指定,所以還要還要指定PAGETITLE,並調用函數

parse(MAIN, "bar"); ?>

進行處理,並將處理後的結果賦予變數MAIN。

如下:


$tpl->assign(PAGETITLE, "FooBar test");
$tpl->parse(MAIN, "bar");

?>

很簡單吧,最後我們只需輸出頁面即可:


$tpl->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


include "class.FastTemplate.php3";

$tpl = new FastTemplate( ".");
$tpl->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"); ?>
其中的.表示追加。

如下:


# 處理模板foo,並賦予變數TPL1
$tpl->parse(TPL1, "foo");

# 處理模板bar,並追加進變數TPL1
$tpl->parse(TPL1, ".bar");

?>

下面是一個完整的表格例子,大家好好揣摸揣摸

page.tpl


Feature world - {PAGE_TITLE}

{PAGE_TITLE}


{PAGE_CONTENT}



table.tpl




{TABLE_ROWS}
name size


table_row.tpl


{FILENAME}
{FILESIZE}


yad.php3


include "class.FastTemplate.php3";

function InitializeTemplates() {
global $tpl;

$tpl = new FastTemplate( ".");
$tpl->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 來替換模板中的宏。
  • 相關關鍵詞:
    相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.