+ -
当前位置:首页 → 问答吧 → 自己用的一个Smarty的分页函数

自己用的一个Smarty的分页函数

时间:2008-07-27

来源:互联网

复制PHP内容到剪贴板
PHP代码:

<?php
//PAGE : $total总页数   $per每页显示条数  $show 列表条数
function count_page($total = 0 , $per )
{
$page_out = array(
   'page_first' => '',  //首页
   'page_last'  => '',  //末页
   'page_str'  => '' ,  //分页
   'now_page'  => 1 ,  //当前页
   'offset'  => 0,  //偏移量
   );
$page_count = ceil($total / $per); //总页数
if($page_count <= 1){
  return $page_out;
}
$page_out['now_page'] = @$_GET['page'] + 0;
if($page_out['now_page'] < 1){
  $page_out['now_page'] = 1;
} elseif($page_out['now_page'] > $page_count){
  $page_out['now_page'] = $page_count;
}

$page_out['offset'] = ($page_out['now_page'] - 1) * $per;
//URL正则
$SELF = "[url=http://{$_SERVER[]http://{$_SERVER['HTTP_HOST']}{$_SERVER['PHP_SELF'[/url]]}?";
@$QUERY = $_SERVER['QUERY_STRING'];
$query_page = preg_replace(array("!((&|^)page=([^&]+))|(page=)!" , "!(^&)|[&]{2,}|([&]$)!") , array('' , '') , $QUERY);
$query_page = $SELF . $query_page . ($query_page ? "&" : "");
/*first page*/
$page_out['page_first'] = '1';
if($page_out['page_first'] == $page_out['now_page']){
  $page_out['page_first'] = '<li class="previous-off"><<首页</li>';
}else{
  $page_out['page_first'] = '<li><a href="?page=1"><<首页</a></li>';
}
/*last page*/
$page_out['page_last'] = $page_count;
if($page_out['page_last'] == $page_out['now_page']){
  $page_out['page_last'] = '<li class="next-off"">尾页>></li>';
}else{
  $page_out['page_last'] = '<li><a href="?page=' . $page_count. '">尾页>></a></li>';
}
//限制分页 2008-6-2 Edit
$pageleft = $page_out['now_page'] >= 4 ? $page_out['now_page'] - 4 : 1;
$pageright = $page_out['now_page'] + 4 <= $page_count ? $page_out['now_page'] + 4 : $page_count;

for($i = $pageleft; $i <= $pageright; $i++) {
  if($i == $page_out['now_page']){
   $page_out['page_str'] .= '<li class="active">' . $i . '</li>';
  } else {
   $page_out['page_str'] .= '<li><a href="' . $query_page . 'page=' . $i . '">' . $i . '</a></li>';
  }
}
return $page_out;
}
?>

复制PHP内容到剪贴板
PHP代码:
CSS  文件

/*PAGE*/
#page li { border:0; margin:0; padding:0; font-size:11px; list-style:none; /* savers */ float:left; }
#page a { border:solid 1px #9aafe5; margin-right:2px; }
#page .previous-off,#page .next-off { border:solid 1px #DEDEDE; color:#888888; display:block; float:left; font-weight:bold; margin-right:2px; padding:3px 4px; }
#page .next a,#page .previous a { font-weight:bold; }
#page .active     { background:#2e6ab1; color:#FFFFFF; font-weight:bold; display:block; float:left; padding:4px 6px; /* savers */ margin-right:2px; }
#page a:link,#page a:visited  { color:#0e509e; display:block; float:left; padding:3px 6px; text-decoration:none; }
#page a:hover{ border:solid 1px #0e509e; }

复制PHP内容到剪贴板
PHP代码:

<?php
$page_info = count_page($total , PER_PAGE );//分页参数
 $smarty->assign('page_first' , $page_info['page_first']);
 $smarty->assign('page_last' , $page_info['page_last']);
 $smarty->assign('page_str' , $page_info['page_str']);
 $sql = "SELECT * FROM `news` ORDER BY `id` DESC LIMIT {$page_info['offset']} , " . PER_PAGE;
?>

效果如图:

[ 本帖最后由 phpcaicai 于 2008-7-27 13:41 编辑 ]

作者: phpcaicai   发布时间: 2008-07-27

分页和smarty的关系很大么,只是一个输出,离开了smarty,直接echo都可以
支持下,顶顶顶

作者: 海底的鱼   发布时间: 2008-07-28

楼主说的非常不错!







作者: jia2188   发布时间: 2008-07-28

这不是php杂志第三期留言本实例中的一个函数?!

作者: alphalwei   发布时间: 2008-07-29

g

作者: 508z   发布时间: 2008-07-30