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
http://www.bkjia.com/PHPjc/325078.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/325078.htmlTechArticle1.簡介 也許你對Php Ctemplate不了,解甚看到這個名詞,只知道它的前半部分是一種程式設計語言。沒有關係讓我來給大家介紹一下這個基於php語言...