如何設計Template Engine?

edited 十月 2013 in 進階PHP討論
數個月前使用了一些簡單技術撰寫了一個簡易的樣板引擎。
但是發現功能非常的不完整,有很多地方似乎都無法理解。

之前製作的Enigin只能算是單純的替換字串。
所以我想了解下面這些做法應該如何設計?

1.可以從資料庫抓取替換的字串
--- Ex.抓取{XXX} 在樣版中寫上 {XXX} 可以被替換
2.快取的功能應該如何製作?
--- 快取時間/快取資料夾等等
3.Smarty之中有 assign 可以將陣列轉成 {XXX} 應該如何做?
4.如何設計定時更新樣版的語法?
--- 也想問如何讓PHP在特定時間自動運作
5.樣板引擎設計上應該如何撰寫較節省資源?
6.樣板引擎應該如何設計成物件導向的引擎?
7.如何設計可以動態改變資料的CSS樣板?
--- 如無名小站會員的CSS抓取方式那樣
8.如何設計動態的圖片調用?
--- Ex. img.php?id=1 ←圖片網址,而不需要打上正確網址
9.樣板引擎抓取 GET 資料及 POST 資料
--- 這個好像沒有太大關聯
10. {xxx GET=XXX || POST=XXX} 應該如何做?
--- Smarty 中可以將多個變數放在一個 {} 中,而且可以使用先前套用的規則

問題大約就是這些,希望各位高手能夠協助解決問題。

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=3360

評論

  • edited 四月 2008
    直接去看 Smarty 的 Source Code 。
  • edited 四月 2008
    我看過很多種樣板系統的原始碼了!

    包括 Discuz、TemplatePorwe、Smarty 等

    不過依然不能理解快取的使用方式。
    這篇文章比較主要是想問快取&快取時間的製作。
    還有固定時間會自動執行的PHP程式設計方法。

    其他問題都是附帶問來修正自己觀念的問題。
  • edited 四月 2008
    「看過」不表示理解它的核心觀念,很多時候我們只是去追程式碼怎麼寫的,而不是真正去瞭解它為什麼要這樣做。

    首先 Output Buffer 、 File 、 Date Time 、系統的例行性命令等都是你應該瞭解的東西。

    再來從簡單的實作開始:

    1. 透過 Output Buffer 儲存樣版解析的結果以供下次利用。
    2. 把產生時間寫在快取裡。
    3. 要顯示頁面前,先偷看有沒有快取,另外比對產生時間和目前時間是不是已經過了指定的快取時間。
    4. 最後問自己: PHP 到底能不能定時去做某件事?如何不行?要怎麼借重其他方式?

    很多觀念都可以參考現成 Library 的應用範例,看別人是怎麼用的。然後再去看它們的 Source Code ,看別人是如何實作的。

    另外自己重新發明輪子在學習上來說是件好事,因為這可以幫助自己瞭解運作原理。但是很重要的一點是:要先把觀念建立起來,然後再去瞭解這些觀念應該從何處著手。
  • edited 四月 2008
    Output Buffer 在自己買的電腦書上面似乎只有函式手冊有寫到一點點。

    下面是我看完大大的說明後,大概揣測的流程:

    1.Output Buffer 解析&存檔
    2.產生時間用 time() 抓取,然後放到快取
    3.檢查 time()-快取 >= 時間
    4.如果 >= 則更新樣板

    下面則是樣版的繼續問:
    Output Buffer 印象中是緩衝之類的東西 (上網查了之後沒錯)
    那緩衝會一直存在嗎?如果會,樣板數目多時,會拖慢主機速度吧?
    假使把Output Buffer改成儲存在資料庫會比較節省資源嗎?
    Ex. 一個資料表儲存檔名&解析時間

    接下來,關於 time() 這個函式我一直都很好奇。
    因為很多人能用 time() 出來的數字正確無誤的換算成現在時間。
    我很想知道應該怎麼換算,在資料表裡面的資料我經常看到,卻不會換算。
    說到 time() 這類,我就想到我到目前為止還不會計算時差。
    或者是說不知道在不知道主機時間時,應該如何直接指定時區。

    最後,PHP沒辦法定時執行一個語法嗎?
    Discuz 這款系統在6.0版本竟然有如此的功能,他是如何辦到的?
    難道會是以當天第一位瀏覽者來驅動嗎?

    其實我家裡也有Smarty & PEAR 的書,但是我就像大大的想法依一樣。
    也要自己發明輪子,畢竟每種系統不是都適合自己的網站,對吧?
    而且我看到很多高手都能輕鬆的製作出想要的東西。 現在,書堆了很多,仍然沒辦法做出一些想要的功能。那就是到網路上詢問別人的時候了!
  • edited 六月 2008
    找一本書:

    "專業PHP 5程式設計指南" "上奇科技"

    裡面會有你大部分問題的答案
  • edited 六月 2008
    為何要設計樣板?
    把需要的功能包裝成 widget 物件不就好了嗎?
Sign In or Register to comment.