分页函数,自动识别链接追加跳转参数

jerry thinkphp 2015年11月19日 收藏
TP中分页函数默认会将GET链接转化,所以有一些汉字在传值时会出错,特此写出以下函数,不改变链接模式,追加跳转参数的方式
/*
 *    数据分页
 *    参数 $count数据条数 $row 调用条数
 *    返回值
 *    $array[limit] sql坐标
 *    $array['pages'] 分页链接坐标
 */
function page($count,$row){
    if(!$count){return '';}//空数据将跳出
    $url     = $_SERVER["REQUEST_URI"]; //读取链接
    $page     = $_GET['page']?$_GET['page']:1; //读取分页坐标
    $acount = $count; //数据条数
    $pcount = ceil($acount/$row); //分页数
    $url     = $_GET['page']?str_replace(array('/page/'.$_GET['page'],'&page='.$_GET['page']),'',$url):$url; //去除page参数
    $limit  = ($page-1)*$row.','.$row; //limit调用
    $pagetpl= '<div class="message">[info]</div> <ul class="paginList"> [first] [link] [end] </ul>'; //链接坐标模板
    
    //链接模板
    if(strstr($url,'&')||strstr($url,'=')){
        $url = $url.'&page=[url]';
    }elseif(substr($url,-5)=='.html'){
        $url = substr($url,0,-5).'/page/[url].html';
    }else{
        $url = $url.'/page/[url]';
    }
    
    //信息简介
    $info = '共 '.$acount.' 条信息 '.$page.'/'.$pcount.' 页';
    
    //第一页
    $first = ($page!=1)?'<li class="p_first"><a href="'.str_replace('[url]',1,$url).'">第一页</a></li>':'';
    
    //最后一页
    $end = ($page!=$pcount)?'<li class="p_end"><a href="'.str_replace('[url]',$pcount,$url).'">最后一页</a></li>':'';
    
    //上一页
    $prev = ($page-1)<1?'':$page-1;
    $prev = $prev?'<li><a class="pagepre" href="'.str_replace('[url]',$prev,$url).'">上一页</a></li>':$prev;
    
    //下一页
    $next = ($page+1)>$pcount?'':$page+1;
    $next = $next?'<li><a class="pagenxt" href="'.str_replace('[url]',$next,$url).'">下一页</a></li>':$next;
    
    //链接坐标
    $pagelist = '';
    for($i =1;$i<$pcount+1;$i++){
        if($i == $page){
            $pagelist .= "<li class='phover'><a>$i</a></li>";
        }else{
            $pagelist .= "<li><a href='".str_replace('[url]',$i,$url)."'>$i</a></li>";
        }
    }
    $pagelist = $prev.$pagelist.$next;
    $pagelist = ($pcount>1)?$pagelist:'';
    $show = str_replace('[info]',$info,$pagetpl);
    $show = str_replace('[first]',$first,$show);
    $show = str_replace('[link]',$pagelist,$show);
    $show = str_replace('[end]',$end,$show);
    
    $r['pages'] = $show;
    $r['limit'] = $limit;
    return $r;
}
调用方法 TP框架
$M = M('article');
$page = page($M->where($w)->count(),25);
$list = $M->where($w)->order('wd_px desc,wd_id desc')->limit($page['limit'])->select();
$this->assign('page',$page['pages']);
$this->assign('list',$list);
该方法不局限于TP内,适用于所有PHP程序
原帖地址http://www.90coder.com/Home/Index/article/tid/46.html