對于一般的CMS用戶,CMS系統(tǒng)默認(rèn)的標(biāo)簽封裝的越完整,使用越簡單越受歡迎,但如果是個性化數(shù)據(jù)調(diào)用需求較多的用戶,通常都會感覺系統(tǒng)內(nèi)置的標(biāo)簽局限性太大,不夠靈活,特別是懂PHP或MYSQL的站長朋友們,更希望能夠很方便的直接通過SQL語句在模板中自由調(diào)用數(shù)據(jù)庫中的各種數(shù)據(jù)。
我對PHP和MYSQL不能算精通,但能算CMS的深度用戶,很多時候去測試一款CMS時,都會考慮這款CMS是否支持直接在模板中通過SQL語句來讀取CMS系統(tǒng)內(nèi)的或者外部數(shù)據(jù)源的數(shù)據(jù)。很多時候,希望突破內(nèi)置標(biāo)簽的局限性,靈活自由的以各種形式來調(diào)用CMS數(shù)據(jù)庫中的數(shù)據(jù),特別是不同程序間的數(shù)據(jù)整合調(diào)用時,支持SQL語句的標(biāo)簽?zāi)軌蚴∪ズ芏嗦闊?/p>
那么本文中下面落葉對帝國CMS、PHPCMS及DEDECMS這三款CMS中的支持通過SQL語句直接調(diào)用數(shù)據(jù)的標(biāo)簽作一些對比分析。
1)帝國CMS中直接通過SQL語句調(diào)用數(shù)據(jù)的標(biāo)簽:
如顯示欄目id為1的10條新聞表記錄
[ecmsinfo]"select * from phome_ecms_news where classid=1 order by id desc limit 10",10,30,0,24,1,0[/ecmsinfo] |
實(shí)際上帝國CMS中支持直接SQL語句調(diào)用數(shù)據(jù)的標(biāo)簽不止ecmsinfo這一個標(biāo)簽,所謂的靈動標(biāo)簽 (e:loop)、文字調(diào)用標(biāo)簽phomenews等。
我看到帝國CMS官方論壇有用戶問過,帝國CMS的支持SQL語句的標(biāo)簽是否支持讀取外部數(shù)據(jù)源,管理員WC的回復(fù)是只支持同一個數(shù)據(jù)庫中的數(shù)據(jù)的讀取,其實(shí)這個不難理解,實(shí)際是就帝國CMS的SQL數(shù)據(jù)調(diào)用功能不支持外部數(shù)據(jù)源的調(diào)用,因?yàn)槿绻嵌嗵壮绦虬惭b在同一個數(shù)據(jù)庫下,那本身就可以當(dāng)作同一套程序來處理數(shù)據(jù),如同一數(shù)據(jù)庫中安裝了論壇 和帝國CMS,直接把論壇的數(shù)據(jù)表當(dāng)作帝國CMS的自定義數(shù)據(jù)表來調(diào)用一樣的道理。
帝國CMS的SQL標(biāo)簽的優(yōu)點(diǎn)再于,SQL語句查詢結(jié)果本身在標(biāo)簽內(nèi)部作了處理,用戶可以直接在標(biāo)簽中定義標(biāo)題截取長度、是否顯示欄目名稱、時間格式化等,這些在PHPCMS及DEDECMS的類似標(biāo)簽中都是需要直接在標(biāo)簽的innertxt中自己作邏輯判斷和調(diào)用函數(shù)處理的,這點(diǎn)對于普通用戶還是比較方便的。畢竟,調(diào)用文章列表,要個性化的地方也就基本標(biāo)題顯示長度,時間顯示格式,是否在前面顯示欄目名及列表的模板樣式,帝國這樣的標(biāo)簽都可以很好的實(shí)現(xiàn),夠用了。
2)PHPCMS中的直接通過SQL語句調(diào)用數(shù)據(jù)的標(biāo)簽:GET標(biāo)簽
如帶分頁,示例(調(diào)用欄目ID為1通過審核的10條信息,標(biāo)題長度不超過25個漢字,顯示更新日期,帶分頁)
{get sql="select * from phpcms_content where catid=1 and status=99 order by updatetime desc" rows="10" page="$page"} 標(biāo)題:{str_cut($r[title], 50)} URL:{$r[url]} 更新日期:{date('Y-m-d', $r[updatetime])} {/get} |
在我看來GET標(biāo)簽是PHPCMS中好用的標(biāo)簽,要查詢什么數(shù)據(jù),直接寫好SQL語句,使用GET標(biāo)簽,并且可定自定義是否分頁,分頁每頁顯示的條數(shù),分頁的URL規(guī)則等等,GET標(biāo)簽之間的內(nèi)容為讀取出來的數(shù)組變量,可直接使用PHP模板語法輸出,亦可調(diào)用全局函數(shù)或PHP原生函數(shù)進(jìn)行數(shù)據(jù)處理后輸出。整個處理過程很適合PHP程序員的思維。
GET標(biāo)簽的另一個優(yōu)勢是能夠很方便的調(diào)用外部數(shù)據(jù)源,即其它程序的MYSQL數(shù)據(jù)庫,并且不管是否在同一MYSQL中,不管是不在同一臺服務(wù)器,只需要在PHPCMS后臺數(shù)據(jù)源管理處添加外部數(shù)據(jù)源的主機(jī)如localhost或服務(wù)器IP,然后填寫數(shù)據(jù)庫名、數(shù)據(jù)庫用戶名及數(shù)據(jù)庫密碼,測試連接成功后,后面即可直接在模板中使用GET標(biāo)簽調(diào)用外部數(shù)據(jù)源。
get 標(biāo)簽調(diào)用外部數(shù)據(jù)示例(調(diào)用數(shù)據(jù)源為bbs,分類ID為1的10個最新主題,主題長度不超過25個漢字,顯示更新日期):
{get dbsource="bbs" sql="select * from cdb_threads where fid=1 order by dateline desc" rows="10"} 主題:{str_cut($r[subject], 50)} URL:http://www.pmume.com/viewthread.php?tid={$r[tid]} 更新日期:{date('Y-m-d', $r[dateline])} {/get} |
這點(diǎn)是非常方便的,一個文章主站+論壇 ,然后直接在主站首頁調(diào)用論壇中的帖子,使用GET標(biāo)簽,可以以任何想實(shí)現(xiàn)的方式來讀取論壇數(shù)據(jù)庫的帖子,而其它程序中則只能通過JS調(diào)用或者通過改程序來實(shí)現(xiàn)。
GET標(biāo)簽的優(yōu)勢還在于,如果是進(jìn)行二次開發(fā),新建一個abc.php頁面,只需要引用PHPCMS的公共文件,即可直接使用PHPCMS的模板引擎,然后在模板目錄下新建一個abc.html即可在模板中使用GET標(biāo)簽調(diào)用任何想調(diào)用的內(nèi)容。
如果MYSQL數(shù)據(jù)庫不在同一服務(wù)器,在PHPCMS后臺填好數(shù)據(jù)庫設(shè)置,然后在遠(yuǎn)程服務(wù)器的MY.INI文件中設(shè)置禁用域名DNS反向解析,然后使用GET標(biāo)簽遠(yuǎn)程調(diào)用,速度會和同一臺服務(wù)器相差無幾,跨服務(wù)器數(shù)據(jù)調(diào)用非常方便。
不過,我還不滿足于此,還希望GET標(biāo)簽?zāi)苤苯诱{(diào)用其它類型的數(shù)據(jù)庫數(shù)據(jù),如SQL server中的數(shù)據(jù),如果能實(shí)現(xiàn)這樣,那跨語言平臺整合那將非常方便了。如主站是PHPCMS的,論壇是.NET,這樣如果GET標(biāo)簽也支持讀SQL server中的數(shù)據(jù),那真是無敵了。
3)DEDECMS中直接通過SQL語句調(diào)用數(shù)據(jù)的標(biāo)簽:SQL標(biāo)簽
如調(diào)用文章表中會員ID為1的會員發(fā)布的10條文章
{dede:sql sql='Select * from dede_archives where mid=1 limit 10'} <a href='/plus/view.php?aid=[field:id/]' target='_blank'>[field:title/]</a> {/dede:sql} |
從DEDECMS中SQL標(biāo)簽文檔來看,該SQL標(biāo)簽直接使用SQL語句來調(diào)用簡單的文章列表,還是非常方便的,處理好的innertxt也支持用 PHP函數(shù)處理后輸出,這點(diǎn)和PHPCMS中挺像,但是貌似沒有PHPCMS的GET標(biāo)簽強(qiáng)大,不支持分頁,更不會支持分頁的自定義URL格式。
當(dāng)然,一般的用于側(cè)邊欄調(diào)用一些內(nèi)置標(biāo)簽不方便實(shí)現(xiàn)的數(shù)據(jù),夠用了。
從這三款CMS的SQL標(biāo)簽來看,個人還是更喜歡PHPCMS的GET標(biāo)簽,而DEDECMS中的SQL標(biāo)簽也比較靈活夠用,至于帝國CMS的標(biāo)簽的SQL語句查詢,雖然他和DEDECMS的SQL標(biāo)簽功能相當(dāng),并且在帝國CMS體系內(nèi),支持SQL查詢,也是一個非常不錯的功能,但感覺上還是不太喜歡,可能根本問題,還是因?yàn)楸旧砭蛯Φ蹏鳦MS標(biāo)簽的處理方式有很大“偏見”吧。
系列相關(guān)文章:
- 帝國、PHPCMS及織夢對比(一):自定義模型功能分析
- 帝國、PHPCMS及織夢對比(二):支持SQL調(diào)用的標(biāo)簽
- 帝國、PHPCMS及織夢對比(三):自定義URL規(guī)則
- 帝國CMS與PHPCMS對比(四):碎片功能分析
- 帝國、PHPCMS及織夢對比(五):標(biāo)簽解析方式分析
- 帝國、PHPCMS及織夢對比(六):專題功能對比分析
- 帝國、PHPCMS及織夢對比(七)之自定義表單功能分析
- 帝國、PHPCMS及織夢對比(八):SEO輔助功能及個性化調(diào)用分析
- 帝國、PHPCMS及織夢對比(九):關(guān)聯(lián)類別屬性
- 帝國、PHPCMS及織夢對比(十):推薦位功能
- 帝國、PHPCMS及織夢對比(十一):采集功能
- 帝國、PHPCMS及織夢對比(十二):PHPCMS低級BUG問題分析