登录 |

分页函数

2011年09月5日 下午 54:14 | 作者:

以前开培训班,教学生写的一个分页函数

function page_html($page, $total, $size=10, $show=10, $url=null, $name='page'){
    $page  = intval($page);
    $page  = ($page == 0) ? 1 : $page;

    $max   = ceil($total/$size);
	$page  = ($page > $max) ? $max : $page;
	$show  = ($show < $max) ? $show : $max;
	
    $start = page_start($page, $max, $show);
    $end   = $start + $show;
    
    $url   = page_url($url, $name);
    
	for($i = $start; $i < $end; $i++){
		if( $i == $page){
			$html .= "$i";
		} else {
			$html .= "$i";
		}
	}
	return $html;
}

function page_url($url=null, $name='page'){
    $url = ( empty($url) ? $_SERVER['REQUEST_URI'] : $url);
    list($url, $query) = explode('?', $url, 2);
    
    if( !empty($query) ){
        $query = preg_replace("|$name=\d+&?|", '', $query);
        $query = trim($query, '&?') . '&';
    }
    
    $url .= '?' . $query . $name . '=';
    return $url;
}

function page_start($page, $max, $show=10){
	$start = 1;
	if( $max > $show ){
		$offset = floor($show/2);
		switch (1){
			//[12]3456789
			case ($page <= $offset):
				$start = 1;
				break;
			//1234567[89]
			case ($page > ($max - $offset)):
				$start = $max - $show + 1;
				break;
			//12[34567]89
			default:
				$start = $page - $offset;
				break;
		}
	}
	return $start;
}