ThinkPHP 內建的 ORG.Util.Page 分頁類讓分頁功能變得非常簡單快捷。然而,當同一頁面需要顯示兩組獨立的分頁(例如同時展示「最新文章」與「熱門推薦」列表)時,預設的分頁參數 p 會發生衝突,導致兩組分頁聯動、頁碼錯亂。
ThinkPHP 分頁類預設使用 varPage 屬性作為 URL 參數名(預設為 p)。當頁面上存在兩個分頁實例時,它們共用同一個參數,點擊任一分頁的頁碼都會同時改變另一組的頁面,這顯然不是我們想要的結果。
最直接的方法是複製一份分頁類檔案,並修改其參數名稱,使兩組分頁使用不同的 URL 參數。
在 ThinkPHP/Extend/Library/ORG/Util/ 目錄下找到 Page.class.php,複製一份並重命名為 NPage.class.php(名稱可自定,建議語義化)。
打開 NPage.class.php,進行兩處關鍵修改:
class Page 改為 class NPage。$this->varPage = C('VAR_PAGE') ? C('VAR_PAGE') : 'p';
將預設參數 'p' 改為 'np'(或其他不衝突的名稱):
$this->varPage = C('VAR_PAGE') ? C('VAR_PAGE') : 'np';
現在可以在控制器中分別引入兩個分頁類,實現互不干擾的雙分頁:
// 原生分頁(參數 p)
import('ORG.Util.Page');
$page1 = new Page($count1, $listRows1);
// 新分頁類(參數 np)
import('ORG.Util.NPage');
$page2 = new NPage($count2, $listRows2);
'VAR_PAGE' => 'p', 'VAR_NPAGE' => 'np',避免硬編碼。MultiPage 基類,自動分配參數名。通過簡單的「複製-重命名-修改參數」三步驟,即可完美解決 ThinkPHP 單頁雙分頁衝突問題。這個方案雖然技術含量不高,但實用性極強,是許多 ThinkPHP 開發者的必備技巧。