ThinkCMF簡介:ThinkCMF是一款基於PHP+MYSQL開發的中文內容管理架構。ThinkCMF提出靈活的應用機制,架構自身提供基礎的管理功能,而開發人員可以根據自身的需求以應用的形式進行擴充。每個應用都能獨立的完成自己的任務,也可通過系統調用其他應用進行協同工作。在這種運行機制下,開發商場應用的使用者無需關心開發SNS應用時如何工作的,但他們之間又可通過系統本身進行協調,大大的降低了開發成本和溝通成本。
在過去的一兩個月裡,一直在苦心學習thinkphp,thinkphp作為國內php開源界的領軍者,這麼說一點也不為過,畢竟上到開源中國上去看看php的開源項目,沒有幾個不是基於thinkphp的。說是作為中小企業的最佳選擇一點不為過。而在所有的thinkphp項目中,我看中了thinkcmf這個cmf架構,cmf對於我們來說,還是一個比較新的概念。本來我是準備好好看看thinkphp官方推出的onethink,但是無奈這個大神之作,我小菜難以琢磨其意圖。只能等著他日學有所成的時候在好好體會一下那些個工作了n年的哲人們的思想。暫時thinkcmf這個架構還是最符合我的要求的,既接程式員的地氣,也接使用者的地氣,相關的第三方登入也都整合好了,確實是省了不少事啊。在這裡暫時分享一下我在研究這個cmf架構的一些筆記。
問題一:thinkcmf的外掛程式系統是怎麼實現的。
看圖:
在網站的根目錄下有個plugins的目錄,裡面有三個外掛程式目錄分別為Demo,Jam,Snow。在管理員後台會通過檔案掃描的方式掃到這些個檔案,並顯示在擴充管理->鉤子裡,但是要注意外掛程式的檔案規格具體在官方文檔(http://www.thinkcmf.com/document/article/id/372.html)上寫的很詳細,並且該程式還有一個Demo可以參考,使用起來非常方便。當你在後台點擊安裝的時候,會把相關的設定檔寫到資料庫中,其中包括鉤子的介紹,和掛載點(比如:footer)。
知道了這些之後,當我們每次訪問頁面的時候系統都要從資料庫裡讀取鉤子和所要啟動並執行函數進行函數註冊,當運行到這個鉤子(就比如hook("footer))的時候就會觸發這些個外掛程式的函數。
或許你會很疑惑到底什麼是鉤子,這個其實很簡單,這麼做個小小的程式比喻:
<?phpfunction do($name){switch ($name) {case 'footer'://鉤子func1(){}//外掛程式一func2(){}//外掛程式二func3(){}//外掛程式三break;case 'footer_end':func1(){}//外掛程式五func2(){}//外掛程式六func3(){}//外掛程式七break;}}do("footer");// 這裡就是footer鉤子的執行了 ,相對應thinkcmf的hooks('hooks')
問題二:為什麼普通的程式的都XXXXBehavior這樣寫的,但是thinkcmf可以直接使用XXXX
因為他們更改了thinkphp架構Hook類源碼,具體看simplewind\Core\Library\Think\Hook..classphp中的Hook類。