2010-06-14 57 views
10

10页我有一个显示像这样所有页面的列表分页脚本:
prev [1][2][3][4][5][6][7][8][9][10][11][12][13][14] next
但我想只有一次显示的数字十:
prev [3][4][5][6][7][8][9][10][11][12] next分页 - 每

我该如何做到这一点?这是我到目前为止的代码:

<?php 
/* Set current, prev and next page */ 
$page = (!isset($_GET['page']))? 1 : $_GET['page']; 
$prev = ($page - 1); 
$next = ($page + 1); 

/* Max results per page */ 
$max_results = 2; 

/* Calculate the offset */ 
$from = (($page * $max_results) - $max_results); 

/* Query the db for total results. 
    You need to edit the sql to fit your needs */ 
$result = mysql_query("select title from topics"); 

$total_results = mysql_num_rows($result); 

$total_pages = ceil($total_results/$max_results); 

$pagination = ''; 

/* Create a PREV link if there is one */ 
if($page > 1) 
{ 
    $pagination .= '< a href="?page='.$prev.'">Previous</a> '; 
} 

/* Loop through the total pages */ 
for($i = 1; $i <= $total_pages; $i++) 
{ 
    if(($page) == $i) 
    { 
     $pagination .= $i; 
    } 
    else 
    { 
     $pagination .= '< a href="index.php?page='.$i.'">'.$i.'</a>'; 
    } 
} 

/* Print NEXT link if there is one */ 
if($page < $total_pages) 
{ 
    $pagination .= '< a hr_ef="?page='.$next.'"> Next</a>'; 
} 

/* Now we have our pagination links in a variable($pagination) ready to 
    print to the page. I pu it in a variable because you may want to 
    show them at the top and bottom of the page */ 

/* Below is how you query the db for ONLY the results for the current page */ 
$result=mysql_query("select * from topics LIMIT $from, $max_results "); 

while ($i = mysql_fetch_array($result)) 
{ 
    echo $i['title'].'<br />'; 
} 
echo $pagination; 
?> 
+1

我们想回答的问题,而不是做你的工作适合你。 – 2010-06-14 11:48:41

+0

你打算如何在显示10条记录后自动移动页面。你需要JS,因为你知道 – Starx 2010-06-14 11:48:43

+2

为什么你的href与“_”之间 – Starx 2010-06-14 11:51:43

回答

25

10个几页

for($i = $page + 1; $i <= min($page + 11, $total_pages); $i++) 

,或者如果你想5上一个和下一个5

for($i = max(1, $page - 5); $i <= min($page + 5, $total_pages); $i++) 
+0

感谢您的快速答案,这真是有帮助..从来没有想过这将是如此之快! :) – arthur 2010-06-14 12:11:12

+0

啊..不知道那个接受的东西。只是最后一个问题..如何使所有的页面(数字)显示不变的数量。 - 当我打开时,它显示第1-6页,每当我按下时,它增加1额外 - 1-7; 1-8; 1-9;并关闭到最后它逐一删除... – arthur 2010-06-14 13:36:01

+1

@arthur:使用第二个,它的工作原理像1-10,如果你在第5页上,并且如果你点击下一步,你将进入第6页, 11,在第7页你有3-12。并且您可以通过点击我帖子左侧的投票编号下的标记来接受提问。 – Svisstack 2010-06-14 13:45:48

0

如果你只是想速战速决,你可以尝试修改您for循环一点。例如,你不会想从1开始,并且你不一定要循环,而$i <= $total_pages

显示奇数个分页链接可能会更有意义:您将显示当前页面,然后显示当前页面,然后显示其左侧四个,右侧显示四个。事情是这样的:

for($i = $page_number - 4; $i <= $page_number + 4; $i++) { 

,但你显然需要做的多一点,以确保你不显示负数,或显示除有网页链接越多。

+0

这个解决方案是一个越野车,如果你在第4页或更少,不工作,不工作,当你在最后4页 – Svisstack 2010-06-14 13:21:03

+0

因此最后一段 - 我只是提供了一个起点 – 2010-06-14 14:31:24

0
$page = 3; 
$totalPages = 33; 
$count = 9; 
$startPage = max(1, $page - $count); 
$endPage = min($totalPages, $page + $count); 

if($page-1 > 0){ 
    echo '<a class="btn btn-default" href="/search-results?page="'.($page- 
1).'"><< Prev</a>'; 
} 

for($i = $startPage; $i < $endPage; $i++): if($i <= $totalPages): 

    echo '<a class="btn btn-<?=$i == $page || $i == 1 && $page == "" ? 
    'success' : 'primary';?>"style="margin-right:2px;" href="/search- 
    results?page="'.$i.'">'.$i.'</a>'; 

endif; endfor; 
if($page < $totalPages){ 
    echo '<a class="btn btn-default" href="/search-results?page="'. 
    ($page+1).'">Next >></a>'; 
} 
0

我刚刚一直在寻找的答案,同原来的问题,并couldn我找不到,所以这就是我想出来的。我希望别人觉得它有用。

$totalPages = 20; 
$currentPage = 1; 

if ($totalPages <= 10) { 
    $start = 1; 
    $end = $totalPages; 
} else { 
    $start = max(1, ($currentPage - 4)); 
    $end = min($totalPages, ($currentPage + 5)); 

    if ($start === 1) { 
     $end = 10; 
    } elseif ($end === $totalPages) { 
     $start = ($totalPages - 9); 
    } 
} 

for ($page = $start; $page <= $end; $page++) { 
    echo '[' . $page . ']'; 
} 

结果:

$currentPage = 1; // [1][2][3][4][5][6][7][8][9][10] 
$currentPage = 4; // [1][2][3][4][5][6][7][8][9][10] 
$currentPage = 10; // [6][7][8][9][10][11][12][13][14][15] 
$currentPage = 17; // [11][12][13][14][15][16][17][18][19][20] 
$currentPage = 20; // [11][12][13][14][15][16][17][18][19][20]