请问“第 1 2 3 ...页”这种分页显示怎么做?

就是按了“...”后,它又会显示“第...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&amp;page=1"'>&lt;&lt;</a>

1";   
2for($i = $from; $i <= $to; $i++)   
3{   
4if($i != $curr_page)   
5{   
6$fwd_back .= "

<a href='"$mpurl&amp;&amp;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&amp;&amp;page=$pages"'> [$pages] &gt;&gt;</a>

1" : "

<a href='"$mpurl&amp;&amp;page=$pages"'>&gt;&gt;</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的值去验证,发觉都是正确的!至于有没有其他逻辑的漏洞就不知道了,如果有的话,请大家指出!

Published At
Categories with Web编程
Tagged with
comments powered by Disqus