近來發現blog中的「搜尋」區塊在找尋文章時,最多只能顯示最近5筆,若點選下方的「顯示全部結果」,它會直接跳回搜尋頁面。不是很嚴重的問題,但就是令人討厭。
這次試著用gemini來解決這個問題,過程頗有趣,記錄一下。
因使用架站使用現成的套裝軟體與模組,且個人不熟悉php語法,所以在找問題的過程中,提問與判斷,是很重要的事。
一開始它給了兩個選項。
步驟一:檢查並修正佈景主題中的「顯示全部結果」連結
步驟二:檢查 XOOOPS 核心 search.php 檔案是否有 Bug
步驟三:修改搜尋預設的顯示筆數(治本或調整限制)
我先用最簡單的步驟三,修改search.php的預設筆數,成功,但跟我預期結果仍有差距。直接假設步驟二:有 Bug,於是進入下一階段,先是下載最近的search.php,無效。再來檢查 search.php 的 action 判定,無效。接著開始天書般的語法修改如下:
1. 確保變數強制由 $_GET 或 $_POST 取得
2. 關鍵:修改核心 if 條件判斷式
此時已不知自己在改什麼,只能照抄,而結果還是無效。
於是換個方式,將整個php傳給gemini,請它翻譯各段語法,再確認問題是出在哪段,接著它給了四個選項,在原因 1 與原因 4 排除後,gemini回應如下:
問題通常就只剩下最核心的兩個死穴了:原因 2(模組本身的 search 函數不支援分頁) 或 原因 3(佈景主題的 HTML 樣板沒有寫 showall 的迴圈)。
為了精準找出問題,我們可以直接在 search.php 裡加入兩行偵錯(Debug)程式碼,來確認到底是「資料庫根本沒撈出全部資料(原因 2)」還是「有撈到資料但網頁沒畫出來(原因 3)」。
第一步:用兩行程式碼抓出真兇請打開你的 search.php,找到 case 'showall': 底下的這段程式碼(大約在第 173 行上下)……
若情況 A:……;若情況 B:……
……
既然情況 B 出現了,且印出 「撈到的總筆數是: 20 筆」,這是一個非常棒的音訊!
這代表後台程式、資料庫、模組功能全部都是健康的,它確確實實有把全部 20 筆資料從資料庫撈出來。註解掉踢回首頁的程式碼後,頁面沒有再跳回空白搜尋頁,但內容卻依然沒有顯示,這就百分之百鎖定了唯一的真兇:原因 3(佈景主題的 HTML 樣板沒有寫 showall 的顯示迴圈)。
在經過上方一個步驟一個步驟的除錯,最後終於確認問題出在原因三:Smarty 樣板(Template)沒有對應好。
於是開始找到系統(System)模組底下的 system_search.tpl(這就是負責搜尋結果畫面的樣板)。點擊編輯它。
這邊試了多次,原來XOOPS的system_search.tpl,是放在佈景裡,而非預設的delog,
然後再把tpl檔傳給gemini,請它判斷修改方式。
有趣的是,一直依它的方式修改語法,但一直不成功,最後它給了這段回覆
終極修復方案:把樣板的「豬隊友判斷」拿掉
既然我們都已經在 search.php 裡確定 $count = 20 且有撈到資料了,樣板就不需要再層層設防。請直接把這幾行礙事的安全檢查拆掉。
請將你 system_search.tpl 的 第 40 行 到 檔案結尾(<{if isset($form)}> 之前) 的這整大段徹底替換成以下這個「精簡、無阻礙」的乾淨版本:
然後問題就解決了!
但老實說最後那個語法在幹麼,我還是不懂。
Gemini解決了我的問題,但怎麼解決的,還是不清楚。