tp5.0.20 分頁跳轉時URL錯誤的解決辦法

liuyun032發表於2018-11-15

最近的專案用TP5.0.20 , 在使用過程中發現分頁有時候 正常有時候 不正常 ,可能是伺服器配置的問題吧 ,分頁點選下一頁面的時候 URL不正確 , 於是百度了蠻久 , 也到TP官網論壇裡面去找幫忙 ,結果都是沒有效果 ,於是 想,自己能不能按照自己的需求來改進一下這個分頁功能。結果還真的成功了 。分享一下!

首頁,在執行的時候已經設定了 \think\Url::root('/public/index.php?s=') ;  所以訪問頁面基本上都是 類似於 http://域名/public/index.php?s=/index/Order/index.html  ,當有分頁的時候 ,下一頁系統預設是 index.php?page=2 ,這樣肯定不能正常訪問到正確的下一頁 , 正確的URL應該是 /public/index.php?s=/index/Order/index/page/2.html  .所以得動手 修改一下分頁的功能了。

1.修改一下配置檔案config.php中的對於分頁的設定 ,我的配置如下 :

 

 

 

 

 

注意:path,iswrong 這兩項是自己配置的,

2.修改核心檔案功能 \think\library\think\Paginator.php , 修改的部分如下 , 只需要修改 url()方法即可;程式碼如下

 

    protected function url($page)

    {

        if ($page <= 0) {

            $page = 1;

        }

        

        if (strpos($this->options['path'], '[PAGE]') === false) {

            $parameters = [$this->options['var_page'] => $page];

            $path       = $this->options['path'];

        } else {

            $parameters = [];

            $path       = str_replace('[PAGE]', $page, $this->options['path']);

        }
        
        
        
        if (count($this->options['query']) > 0) {

            $parameters = array_merge($this->options['query'], $parameters);

        }
        
        
        
        if( $this->options['iswrong'] ){ // 自己寫的
            
            $request= \think\Request::instance();
            
            $path .= "/".$request->module()."/".$request->controller()."/".$request->action() ;    
            
            $url = $path;
            
            if (!empty($parameters)) {
                
                foreach($parameters as $key=>$val){
                    $url .= '/' . $key.'/'.$val ;
                }
                
                $url .='.'.config('url_html_suffix') ;
            }
            
            
            
        }else{ // 系統原來的
        
    
            $url = $path;
            
            if (!empty($parameters)) {
    
                $url .= '?' . http_build_query($parameters, null, '&');
    
            }
            
            
        }
        
        
        return $url . $this->buildFragment();

    }
 

如果能解決你的問題記得點贊喲~~

相關文章