免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 902 | 回复: 0
打印 上一主题 下一主题

分页函数(Smarty + Adodb) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-20 02:36 |只看该作者 |倒序浏览

?php
/**
* 函数:(Adodb + Smarty) 内容列表分页
* 版本:最终(完美处理了导航链接)
* 已通过Mysql、Oracle 测试
* 时间:2006/9/29
* 作者:欣然随风
*
* 参数:
* @table -- 表名
* @pageSize-- 每页信息数
* @midPage -- 导航链接数量
* @where -- 查询条件
*
* 全局变量:
* @conn -- 数据库操作object
* @tpl -- 模板操作object
* @start -- 返回的LIMIT的开始下标
*
*/
function page($table,$pageSize,$midPage,$where="1=1")
{
    global $conn,$tpl,$start;
    // 分页开始
    $total = $conn->getOne("SELECT COUNT(*) FROM $table WHERE $where");
    $totalPage = ceil($total/$pageSize);
    $currentPage=@$_REQUEST['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?".($currentPage-1)."\" Title='上一页'>\n":"";
    $next = $currentPage  $totalPage ?".($currentPage+1)."\" Title='下一页'>>>\n":"";
    $first = $currentPage > 1?"首页\n":"";
    $last = $currentPage  $totalPage?"尾页\n":"";
    // 导航链接
    $midPages = '';
    $num = $currentPage-floor($midPage/2);
    if($num > 0)
    {
        if(($totalPage-$num)  $midPage)
        {
            $tmp = $totalPage - $midPage;
            $num = $tmp 0 ? 1 : ++$tmp;
        }
    }else $num = 1;
    for($i=1; $i=$midPage;$i++,$num++)
    {
        if($num > $totalPage) break;
        $midPages .= ($num == $currentPage) ? '['.$num.'] '
                                            : ".$url."=".$num."'>".$num." ";
    }
    $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.

模版:
table width="100%" cellpadding="12">
form method=GET action="" onSubmit="val=document.getElementById('page').value;if(val>0&&val!=&&val){location.href='?='+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="" id='page'>
input type="submit" value="GO">
/td>
/tr>
/form>
/table>



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/10599/showart_234968.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP