分页函数(Smarty + Adodb)

来源:互联网 发布:新linux 安装lnmp 编辑:程序博客网 时间:2024/05/16 13:42

<?php
/*
 * 作用:内容列表分页
 * 时间:2006-2-21
 * 作者:欣然随风
 * 其它:修改于纯粹误会《Google的分页程序》
 *
 * 参数:
 *  $table  表名,必选
 *  $where  查询条件,可选
 *  $pageSize 信息数量,可选
 *  $midPage 导航链接数量,可选
 *
 *全局变量:
 *  $conn  数据库操作object
 *  $tpl  模板操作object
 *  $start  返回的LIMIT的开始下标
 */
function page($table,$pageSize,$midPage,$where="1=1")
{
    global $conn,$tpl,$start,$total;

    // 分页开始
    $total = $conn->getOne("SELECT count(*) FROM $table WHERE $where");
    $totalPage = ceil($total/$pageSize);
    $currentPage=@$_GET['page']+0;

 if(!is_numeric($currentPage) ||  $currentPage < 1 || empty($currentPage) ||  $currentPage > $totalPage)
        $currentPage=1;

    // 设置地址,正则替换掉
    $url = preg_replace(
      array("!(([&]|^)(page)[=]?([^&]+)?)|((([&]){2,})|(^[&])|([&]$))!",),
      array(""),
      $_SERVER["QUERY_STRING"]
      );
 //追加
    $url.=($url?"&":"").'page';

    $start = ($currentPage-1)*$pageSize;
    $back  = $currentPage > 1?"<a href=/"?$url=".($currentPage-1)."/" Title='上一页'><u><<</u></a>/n":"";
    $next  = $currentPage < $totalPage ?"<a href=/"?$url=".($currentPage+1)."/" Title='下一页'><u>>></u></a>/n":"";
    $first = $currentPage > 1?"<a href=/"?$url=1/"><u>首页</u></a>/n":"";
    $last  = $currentPage < $totalPage?"<a href=/"?$url=$totalPage/"><u>尾页</u></a>/n":"";

    for($midPages='',$i=$currentPage-$midPage,$i>0||$i=1,$end=$currentPage+$midPage,$end<=$totalPage||$end=$totalPage+1;$i<$end;$i++)
    {
        $midPages.=$i==$currentPage?"[$i]/n":"<a href=/"?$url=$i/"><u>$i</u></a>/n";
    }

    $tpl->assign("page_total",  $total);   // 总计
    $tpl->assign("page_currentPage",$currentPage);  // 当前页码
    $tpl->assign("page_totalPage", $totalPage);  // 总页数
    $tpl->assign("page_back",  $back);    // 上一页
    $tpl->assign("page_next",  $next);    // 下一页
    $tpl->assign("page_first",  $first);   // 首页
    $tpl->assign("page_last",  $last);    // 尾页
    $tpl->assign("page_midPages", $midPages);   // 中间页
    $tpl->assign("page_url",  $url);    // 当前页地址
}
?>

 

测试:

$where = "1=1";

// 分页,并得到$start
page(TABLE,$pageSize=20,10,$where);

// 内容显示

$sql = "select * from ".TABLE." WHERE ".$where.";
$data = &$conn->SelectLimit($sql,$pageSize,$start);

.....

$tpl->display(page.tpl');

模板文件:

<table width="100%" cellpadding="12">
<form method=GET action="" onSubmit="val=document.getElementById('page').value;if(val>0&&val!=<{$page_currentPage}>&&val<<{$page_totalPage}>){location.href='?<{$page_url}>='+val};else{return false}">
<tr>
<td align="right">
共<{$page_total}>条 
第<{$page_currentPage}>/<{$page_totalPage}>页 
<{$page_first}>
<{$page_back}>
<{$page_midPages}>
<{$page_next}>
<{$page_last}>
<input name="page" type="text" size="1" class="input" value="<{$page_currentPage}>" id='page'>
<input type="submit" value="GO">
</td>
</tr>
</form>
</table>

原创粉丝点击