phpcms是一個十分強大的cms開發平臺,自定義程度很高,如果懂技術的話,使用起來如魚得水,事半功倍,特別是最新的v9,采用mvc框架結構,性能更好,但是由于v9是一個推倒重來的系統,里面必然會存在多多少少的bug.get標簽在phpcms2008版本的時候就很受開發者歡迎,自定義程度很高,v9也繼承了2008的get標簽,最近在使用v9的get標簽是,發現一個不足之處.
- {pc:get sql="SELECT * FROM phpcms_member" cache="3600" page="$page" dbsource="discuz" return="data"}
- <ul>
- {loop $data $key $val}
- {$val[username]}<br />
- {/loop} //Vevb.com
- </ul>
- {$pages}
- {/pc}
這 是官方給出的v9 get標簽使用說明,其中page="$page" 是來調用分頁的,當然如果用官方給出的那種簡單的標準的sql語句來說毫無問題,問題就出現在如果我使用復雜的sql語句就會出現分頁不出現的情況,必如 這個語句sql="SELECT * FROM `v9_news` where catid in (select catid from v9_category where parentid=6) order by updatetime desc".測試多遍不出現分頁,經過分析其get代碼,發現問題出現在get函數的這條語句上.
if ($sql = preg_replace('/select([^from].*)from/i', "SELECT COUNT(*) as count FROM ", $datas['sql'])) {
用正則表達式替換select from,上述sql語句里面出現兩次 select from,都被替換掉了。所以造成分頁不會出現,解決問題辦法是把語句變成這樣的sql="SELECT * FROM `v9_news` where catid in (11,12) order by updatetime desc"或者先把select catid from v9_category where parentid=6
查找出來放進變量,變成這樣的:sql="SELECT * FROM `v9_news` where catid in ($newsarrchildid) order by updatetime desc"
分頁正常出現.
新聞熱點
疑難解答