顯示廣告
隱藏 ✕
看板 Mesak
作者 mesak (Mesak)
標題 [PHP] 純分頁程式
時間 2015年02月10日 Tue. PM 04:43:41


程式截取自 CodeIgniter Pagination
function pagination($total_rows = 0, $per_page = 0, $cur_page = 0)
{
	
$num_links = 2;
	
$result = FALSE;
	
if ($total_rows == 0 OR $per_page == 0)
	
{
	
	
return '';
	
}
	
$base_page = 0 ;
	
$num_pages = ceil($total_rows / $per_page);
	
if ($num_pages == 1)
	
{
	
	
return '';
	
}
	
$cur_page = (int)$cur_page;
	
if ($cur_page > $total_rows)
	
{
	
	
$cur_page = ($num_pages - 1) * $per_page;
	
}
	
$uri_page_number = $cur_page;
	
//echo ($cur_page/$per_page);
	
$cur_page = floor(($cur_page/$per_page) + 1);

	
$start = (($cur_page - $num_links) > 0) ? $cur_page - ($num_links - 1) : 1;
	
$end   = (($cur_page + $num_links) < $num_pages) ? $cur_page + $num_links : $num_pages;

	
$result = array();
	
if( $cur_page > ($num_links + 1))
	
{
	
	
$result[] = array('num'=> '1','statu' => 'first');
	
}
	
if( $cur_page != 1)
	
{
	
	
$i = $uri_page_number - $per_page;
	
	
if ($i == 0 )
	
	
{
	
	
	
$result[] = array('num'=> '1','statu' => 'prev');
	
	
}
	
	
else
	
	
{
	
	
	
$i = ($i == 0) ? '' : $i;
	
	
	
$result[] = array('num'=> '1','offset'=> $i,'statu' => 'prev');
	
	
}
	
}
	
for ($loop = $start -1; $loop <= $end; $loop++)
	
{
	
	
$i = ($loop * $per_page) - $per_page;
	
	
if ($i >= $base_page)
	
	
{
	
	
	
$page = array('num'=> $loop,'statu' => '');
	
	
	
if ($cur_page == $loop)
	
	
	
{
	
	
	
	
$page['statu'] =  'active';
	
	
	
}
	
	
	
else
	
	
	
{
	
	
	
	
$n = ($i == $base_page) ? '' : $i;
	
	
	
	
if ($n == '' )
	
	
	
	
{
	
	
	
	
	
$n = ($n == '') ? '' : $n;
	
	
	
	
	
$page['offset'] =  0;
	
	
	
	
	
$page['statu'] =  '1';
	
	
	
	
}
	
	
	
	
else
	
	
	
	
{
	
	
	
	
	
$n = ($n == '') ? '' : $n;
	
	
	
	
	
$page['offset'] =  $n;
	
	
	
	
}
	
	
	
}
	
	
	
$result[] = $page;
	
	
}
	
}
	
if ($cur_page < $num_pages)
	
{
	
	
$i = ($cur_page * $per_page);
	
	
$result[] = array('num'=> '1','statu' => 'next','offset'=>$i);
	
}
	
// Render the "Last" link
	
if ( ($cur_page + $num_links) < $num_pages)
	
{
	
	
$i = (($num_pages * $per_page) - $per_page);
	
	
$result[] = array('num'=> '1','statu' => 'last','offset'=>$i);
	
}
	
return $result;
}

@list($url, $qs) = explode("?", $url, 2);

if( !is_null($qs) ){
	
parse_str($qs, $url_query);
}else{
	
$url_query = array();
}
先把網址拆成參數以及網址。

function build_url( $url , $args = array() )
{
	
if( is_array($args) && count($args)) {
	
	
return $url .'?'.http_build_query($args);
	
}
	
return $url;
}

//$offset 以位移數為主,不以頁面號碼設計,如果要設計頁面號碼可直接參照 CI 的程式
    $pages = pagination($total, $limit, $offset);
    if( is_array($pages) )
    {
	
	
$output = '<ul>';
	
	
foreach($pages as $page)
	
	
{
	
	
	
$title = $page['num']; //頁數
	
	
	
if( isset( $page['offset'] ) )
	
	
	
{
	
	
	
	
$url_query['offset'] = $page['offset'];
	
	
	
}else{
	
	
	
	
unset( $url_query['offset'] );
	
	
	
}
	
	
	
$page_url = build_url( $url , $url_query ); //下一頁網址

	
	
	
if( $page['statu']  == 'active' )
	
	
	
{
	
	
	
	
$link = $title;  //目前該頁
	
	
	
}else{
	
	
	
	
if($page['statu']  != '')
	
	
	
	
{
	
	
	
	
	
$title = $page['statu']; //上一頁下一頁等
	
	
	
	
}
	
	
	
	
$link = '<a href="'.$page_url.'">' . $title . '</a>';
	
	
	
}
	
	
	
$output .= '<li>'.$link.'</li>'; //項目
	
	
}
	
	
$output .= '</ul>';
	
	
echo $output;
    }



--
※ 作者: mesak 時間: 2015-02-10 16:43:41
※ 看板: Mesak 文章推薦值: 0 目前人氣: 0 累積人氣: 262 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇