php+mysql+smarty 分页
<?php /////////////////////////////////分页/////////////////////////////////////////////////// //////////////////////////////// 分页 /////////////////////////////////////////////////// include '../newconfig.php'; $page=isset($_GET['page'])?intval($_GET['page']):1; //句就是获取页面中的page的值,假如不存在page,那么页数就是1。 $total_columns = $DB->count_records_select("course",'',null,"COUNT(fullname)");//返回受影响行数 $num = 5; //每页显示行数 $pagecount = ceil($total_columns/$num); //总页数 $offset =($page-1)*$num; //获取limit的第一个参数的值 $list = $DB->get_records_sql("select course.fullname, expand.`validday` ,expand.paytime,expand.salemoney,shop.`name` from `mdl_course` as course left join `mdl_course_expand` as expand on course.`id`=expand.`courseid` left join `mdl_shop` as shop on expand.`shopid`=shop.`id`",null,$offset,$num); $list = (object)$list; $pagenum = array(); for($i=1;$i<$pagecount;$i++) { $pagenum[$i]=$pagecount-$i; } $smarty->assign("pagenum",$pagenum); $smarty->assign("list",$list); $smarty->display("html/my_babita_student.html"); ?>
下面是html部分关键代码:
{section name=loop loop=$pagenum } <a href="my_babita_student.php?page={$pagenum[loop]}">{$pagenum[loop]}</a> {/section} 这三行代码,使用了smarty里面的section循环显示分页的页码数,要点就是领悟section循环。
这些代码里面有一个bug就是页面分页显示页码是颠倒的:1,3,2.(这里假设3页),这个原因是在为$pagenum数组赋值的时候是从大到小赋值的,所以只要把得到的数组排序即可~。
这里是冒泡排序把序列颠倒过来:
for($i=1;$i<$pagecount;$i++) { $pagenum[$i]=$pagecount-$i; } for ($j=0;$j<count($pagenum);$j++) { for($k=$j+1;$k<count($pagenum);$k++) { $temp=0; if($pagenum[$j]>$pagenum[$k]) { $temp = $pagenum[$j]; $pagenum[$j] = $pagenum[$k]; $pagenum[$k] = $temp; } } }