今天無意中使用xoops的搜尋功能,結果發現資料多於預設數量時會被隱藏,但點選「顯示全部結果」卻查沒有半筆資料!!先釐清是不是佈景吃掉了showall變數,經確認換回官方的xswatch4佈景也是一樣結果,只能動手來找bug了,當然最先懷疑的一定是search.php,經過徹底查詢一路追到
case 'showall':
//略..............
$xoopsTpl->appendByRef('results_arr', $results_arr);
var_dump($results_arr);exit; //輸出陣列
確認$results_arr整包是有被輸出的,但樣板端卻沒顯示,這樣問題就很清楚了,是樣板端吃掉了$results_arr,接下來就來查樣板
../themes/您的佈景id/modules/system/system_search.tpl (如果沒有去xswatch4整包拆回來)
發現$results_arr迴圈根本沒被輸出
<{foreach item=data from=$results_arr|default:null}>
略............
<{/if}>
這下傷腦筋了,PHP有給值,但到樣板卻消失,還好最後在前段找到這個兇手
<{if isset($nomatch) && $nomatch == true}>
因該是case 'showall':沒有給$nomatch = true 所以這一段才會無效,但如果改php檔之後升級xoops又會被覆蓋掉,那只能由樣板端處理
用筆記本開system_search.tpl,搜尋
<{if isset($nomatch) && $nomatch == true}>
替換成
<{if !empty($results_arr) || (isset($nomatch) && $nomatch != true)}>
這樣就能讓「顯示全部結果」恢復正常了(如下圖)
無意間處理了一個陳年的老BUG,現在都沒問題了!
以上工作心得分享,本次修改的system_search.tpl也會更新於neilambilight3.7版(免費佈景),如要自己除錯的朋友可以參考看看!!
工作心得撰寫:徐嘉裕 Neil hsu
留言
張貼留言