1.簡介
也許你對Php Ctemplate不了,解甚看到這個名詞,只知道它的前半部分是一種編程語言。沒有關系讓我來給大家介紹一下這個基於php語言的標簽模版引擎(請允許我這樣去翻譯這套web開發解決方案,盡管我可能翻譯的不准確)。
先簡短說一下他的歷史。了解Php Ctemplate先要知道Ctempalte;Ctempalte全稱是Google Ctemplate。它是一種用c++語言、簡單但是效率非常高的網頁模版引擎。讓我們來看一段代碼,聰明的你立刻就知道它怎麼用了(來自官方Demo)
那麼C++輸出便是:
Hello John Smith
You Have just won (這裡是執行random%100000 隨機數)
Well ,(這裡是執行random%100000 的隨機數再 * 0.83),after taxes
好吧,總結一下 就是把c++源碼中的Template對象加載 tpl(我們可以稱它為模版)文件之後,再填充TemplateDictionary中的對應的值,最後輸出。聽起來很拗口是吧,簡單點把後端標簽對應值填充到tpl的{{標簽}}中。
詳細的請參見http://google-ctemplate.googlecode.com/svn/trunk/doc/index.html
那麼PHP ctemplate呢?大家都知道PHP擴展吧,玩過PHP的朋友都知道gd,exif,mysql,mysqli這些擴展吧。對,就是php.ini 文件裡“extension=”那裡的dll。我總結PHP ctemplate就是用PHP擴展接口的格式,包裝了Google Ctemplate,讓PHP具有Google Ctemplate的功能。再通俗點體現在代碼上就是:tpl文件不變,只是把c++ 文件變成了php文件。至於它的用法我想我在這裡就不多介紹了,他和Google Ctempalte 一樣。
詳見http://code.google.com/p/php-ctemplate/
2.WIN32下可以嗎
也許你會很快意識到這種模版引擎,符合我們常見的MVC吧。沒錯,就是這樣。但是很遺憾,PHP Ctemplate只能在Freebsd系統中運行,win32環境中的php,我至今沒有在網上發現對應的PHP ctemplate dll,我也咨詢過PHP ctemplate的作者,他好像不太願意在win32環境中編譯這些代碼;我曾經和我開發c++的朋友“阿呆”試著編譯,我們找了php源碼+ Ctemplate源碼+PHP ctemplate源碼編譯出了win32下的PHP ctemplate擴展,但是很奇怪,每次php啟動加載PHP ctemplate時,php引擎就會出現異常,PHP ctemplate不能正常加載。
如果成功加載php ctemplate則會在phpinfo 中顯示:
我也看了下PHP ctemplate的源碼好像是基於Zend編寫的。因為本人對c++和php都不是很精通,實在也沒有能力去重新編寫這套擴展,所以只能想了個折中的辦法:把Ctemplate用ATL COM 包裝起來,模擬PHP ctemplate的函數和方法。
3.我的嘗試
之所以這麼曲折,是因為用這套框架後,根本沒有辦法調試PHP代碼,我試過在freebsd的環境中安裝xdebug,好吧,勉強能進行遠程調試。可是freebsd是沒有圖形界面的,哎,無奈下安裝了gnome,只能暫時這樣了。出於好奇和不服氣,我把Ctemplate用ATL COM 包裝起來,模擬PHP ctemplate的函數和方法,但是只完成了一半。在這裡要特別感謝“阿呆”同志,沒有他我也根本寫不出c++的ATL。下面是ATL COM裡面的方法(只完成了一部分)。
我包裝的ATL COM 功能我包裝在了core.php 中。
如果大家有興趣可以找我要源碼繼續完善,因為它是COM的所以ASP也可以使用,我會把dll提供下載。如果大蝦們成在win32下成功編譯使用PHP ctemplate,那我更求之不得。
下載COM文件 phpctempalteCOM