就是按了“...”后,它又会显示“第...4 5 6...页”,到了最后又会显示“第...n-2 n-1 n 页”的,我想了很久,都做不出这种分页显示的效果,好像挺难的,大家有这方面的代码吗?贴一下好吗?asp或php的都可以!
---------------------------------------------------------------
递交一个参数啊。你看比如第二页以后的链接的url,都是有个参数=那页的数值的。
然后php或者asp得到这个递交的数以后,就判断是不是>或者=n,如果是小于的,就把前前后后的数字写出来就是了。
很简单嘛。(如果光想不写的话:)
---------------------------------------------------------------
1
2/*
3function:break page
4author:
5date:2003.7.15
6parameter:
7
8num=all of your pages;
9perpage= how many do you want to show;
10curr_page=current page;
11mpurl=current url;
12
13return:
14multipage=a string under your page
15*/
16function multi($num, $perpage, $curr_page, $mpurl)
17{
18if($num > $perpage)
19{
20$page = 10;
21$offset = 2;
22
23$pages = ceil($num / $perpage);//得到页数
24$from = $curr_page - $offset;//偏移两页
25$to = $curr_page + $page - $offset - 1;
26if($page > $pages)
27{
28$from = 1;
29$to = $pages;
30}
31else
32{
33if($from < 1)
34{
35$to = $curr_page + 1 - $from;
36$from = 1;
37if(($to - $from) < $page && ($to - $from) < $pages)
38{
39$to = $page;
40}
41}
42elseif($to > $pages)
43{
44$from = $curr_page - $pages + $to;
45$to = $pages;
46if(($to - $from) < $page && ($to - $from) < $pages)
47{
48$from = $pages - $page + 1;
49}
50}
51}
52$fwd_back .= "
<a href='"$mpurl&page=1"'><<</a>
1";
2for($i = $from; $i <= $to; $i++)
3{
4if($i != $curr_page)
5{
6$fwd_back .= "
<a href='"$mpurl&&page=$i"'>[$i]</a>
1";
2}
3else
4{
5$fwd_back .= "
<u><b>[$i]</b></u>
1";
2}
3}
4$fwd_back .= $pages > $page ? " ...
<a href='"$mpurl&&page=$pages"'> [$pages] >></a>
1" : "
<a href='"$mpurl&&page=$pages"'>>></a>
1";
2$multipage = $fwd_back;
3}
4return $multipage;
5}
6
7//use
8
9//分页开始
10
11/*
12如果你有一个表叫XXXX,里面有字段叫cid和time,那么可以这样使用。第一次查询出总数num,第二次是进行你所要进行的真正查询,如内容什么的,
13mpurl是你当前页面的url,multipage是最后得到的一个分页串,
14*/
15$table="XXXX";
16$sql1 = "SELECT COUNT(*) AS rcnt FROM $table where cid=$cid ORDER BY time DESC";
17$result1 = @mysql_query($sql1);
18$array1 = @mysql_fetch_array($result1);
19$num = $array1[rcnt];
20$mpurl = "XXXX.php?cid=$cid";
21if(!empty($page)) {
22$start_limit = ($page - 1) * $morenum;
23}
24else {
25$start_limit = 0;
26$page = 1;
27}
28$multipage = multi($num,$morenum,$page,$mpurl);
29$sql="select * from $table where cid=$cid order by time desc limit $start_limit,$morenum";
30//分页结束
31$result = @mysql_query($sql);
32while($array = @mysql_fetch_array($result)){
33XXXXX;
34}//至此已取得数组,不用我再写了吧,我得回家了。
35
---------------------------------------------------------------
在youngfly0137(杨)的激励下,我花了半个晚上动手写,终于自己想出了一个解决的方案,不知有没有纰漏,我是这样想的:
假设$per_page是每页显示信息的条数,$long是一次显示的页数,比如显示“第 1 2 3 ...页”的话,$long就等于3了,$max_page是总页数,$topage是要去的那一页,也可以说是当前页
当$max_page<2*$long时,直接显示所有页数。当$max_page>=2*$long时,又分为三种情况:
$topage<$long+1时,就显示成诸如这样的:“第 1 2 3 ...页”
当$long<$topage<$max_page-$long+1时,就显示成诸如这样的:“第 ...4 5 6 ...页”
当$topage>$max_page-$long时,就显示成诸如这样的:“第 ...7 8 9 页”,下面是具体的代码:
1
2$per_page=3;
3$long=3;
4if($topage<1)$topage=1;
5if($topage>$max_page)$topage=$max_page;
6echo "$topage/$max_page ";
7if($max_page>2*$long-1){
8if($topage<$long+1){
9echo"第";
10for($i=1;$i<$long+1;$i++){
11echo"
<a href="show.php?topage=$i">$i</a>
1";
2}
3$temp=$long+1;
4echo"
<a href="show.php?topage=$temp">...</a>
1";
2echo"页";
3}
4if($topage>$max_page-$long)
5{
6echo"第";
7$temp=$max_page-$long;
8echo"
<a href="show.php?topage=$temp">...</a>
1";
2for($i=$max_page-$long+1;$i<$max_page+1;$i++){
3echo"
<a href="show.php?topage=$i">$i</a>
1";
2}
3echo"页";
4}
5if($topage>$long&&$topage<$max_page-$long+1){
6echo"第";
7$temp=$topage-1;
8echo"
<a href="show.php?topage=$temp">...</a>
1";
2for($i=$topage;$i<$long+$topage;$i++){
3echo"
<a href="show.php?topage=$i">$i</a>
1";
2}
3$temp=$long+$topage;
4echo"
<a href="show.php?topage=$temp">...</a>
1";
2echo"页";
3}
4}
5else
6{
7echo"第";
8for($i=1;$i<$max_page+1;$i++){
9echo"
<a href="show.php?topage=$i">$i</a>
1";
2}
3echo"页";
4}
至于怎样读数据库得到$max_page,和数据的移动,我就不多说了。我用了几组$per_page和$long的值去验证,发觉都是正确的!至于有没有其他逻辑的漏洞就不知道了,如果有的话,请大家指出!