欢迎您访问我的笔记本站旨在于记录一些平时工作中遇到的一些问题和解决方法,方便查阅,部分内容来源于网络,如有侵权请联系我删除
  • 微信微信
您现在的位置是:首页 > PHP后端

thinkphp美化分页url-[原创]

日期:2022-01-10 14:26:56 作者:tanyi 来源:我的笔记 浏览:1122 次
分页链接一般是这样:list?page=1,很多人想把这种样式的url美化一下,弄成这样:list/page/1,由于框架本身不支持所以需要自己去修改相关代码实现

以TP6为例,打开框架的分页基础类Paginator.php,找到url方法,原始方法是这样

 protected function url(int $page): string
    {
        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);
        }

        $url = $path;
        if (!empty($parameters)) {
            $url .= '?' . http_build_query($parameters, '', '&');
        }

        return $url . $this->buildFragment();
    }

对该方法部分代码进行修改,实现美化分页url效果

protected function url(int $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);
    }
    $url = $path=='/'?'':$path;
    $suffix=pathinfo($url,PATHINFO_EXTENSION);
    $suffix=$suffix?'.'.$suffix:'';
    $url=str_replace($suffix,"",$url);
    if (!empty($parameters)) {
        if(isset(request()->param()[$this->options['var_page']])){
            $url=preg_replace("(".$this->options['var_page']."/\d+)",$this->options['var_page'].'/'.$page,request()->url());
        }else{
            $str='';
            foreach ($parameters as $k=>$v){
                $str.='/'.$k.'/'.$v;
            }
            $url.=$str.$suffix;
        }
    }
    return $url . $this->buildFragment();
}

该方法适用于TP5,TP6,曾使用在我自己的网站没有发现问题,如有bug或更简单的方法欢迎指正。

原创文章转载时请注明原始出处,作者等相关信息

提交评论
评论列表