2014-07-07 2 views
0

어쨌든 답변을 찾을 수없는 것 같습니다. 적어도 Google에 시도해 보았습니다. 어쨌든 한 그룹과 비슷한 그룹 기능을 만들었지 만 이후 좋지는 않습니다. 나는 이것을 개발하는 유일한 사람이지만 시간이 지남에 따라 더 좋아집니다.큰 데이터베이스의 경우 페이지 번호를 제한하십시오

어쨌든 이 코드는 페이지 번호를 어떻게 제한합니까? 예를 들어 데이터베이스에 결과가 많은 경우 처음 10 개만 사용하여 점을 표시 한 후 클릭하고 원하는만큼 깊이 갈 수 있기를 원할 때 클릭하면 10 점이 더 늘어납니다. 20 그러면 -30이 페이지 매김으로 표시됩니다. 나는 이것과 정확히 같을 필요는 없지만 한 번에 표시되는 숫자의 수를 제한하는 어떤 방법이 있습니다. 여기

는,

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 

<style type="text/css"> 
#content 
{ 
    width: 900px; 
    margin: 0 auto; 
    font-family:Arial, Helvetica, sans-serif; 
} 
.page 
{ 
float: right; 
margin: 0; 
padding: 0; 
} 
.page li 
{ 
    list-style: none; 
    display:inline-block; 
} 
.page li a, .current 
{ 
display: block; 
padding: 5px; 
text-decoration: none; 
color: #8A8A8A; 
} 
.current 
{ 
    font-weight:bold; 
    color: #000; 
} 
.button 
{ 
padding: 5px 15px; 
text-decoration: none; 
background: #333; 
color: #F3F3F3; 
font-size: 13PX; 
border-radius: 2PX; 
margin: 0 4PX; 
display: block; 
float: left; 
} 
</style> 


</head> 
<body> 
<div id="content"> 
<?php 
error_reporting(0); 
$query1=mysql_connect("localhost","root",""); 
mysql_select_db("freeze_demo",$query1); 
error_reporting(0); 
$start=0; 
$limit=1; 

if(isset($_GET['id'])) 
{ 
    $id=$_GET['id']; 
    $start=($id-1)*$limit; 
} 

$query=mysql_query("select * from pagination LIMIT $start, $limit"); 
echo "<ul>"; 
while($query2=mysql_fetch_array($query)) 
{ 
    echo "<li>".$query2['text1']."</li>"; 
} 
echo "</ul>"; 


$rows=mysql_num_rows(mysql_query("select * from pagination")); 
$total=ceil($rows/$limit); 

if($id>1) 
{ 
    echo "<a href='?id=".($id-1)."' class='button'>PREVIOUS</a>"; 
} 
if($id!=$total) 
{ 
    echo "<a href='?id=".($id+1)."' class='button'>NEXT</a>"; 
} 

echo "<ul class='page'>"; 
     for($i=1;$i<=$total;$i++) 
     { 

      if($i==$id) { echo "<li class='current'>".$i."</li>"; } 

      else { echo "<li><a href='?id=".$i."'>".$i."</a></li>"; } 
     } 
echo "</ul>"; 
?> 
</div> 
</body> 
</html> 

그냥 기본적으로 내 데이터베이스 또는 특정 그룹이 더 큰 얻을 때 미래를 업데이트하는 데 필요한 코드를이야.

감사

+0

가끔 문제를 설명하기 어려울 수 있습니다. 페이지 번호를 제한하여 표시하려면 한 번에 표시 할 수 있습니다. 페이지 번호가 표시됨 – Spudster

+0

은 SQL 오류를 수정했습니다.) – Spudster

답변

1
<?php 
function custom_pagination($page, $totalpage, $link, $show) //$link = '&page=%s' 
{ 
    //show page 
if($totalpage == 0) 
{ 
return 'Page 0 of 0'; 
} else { 
    $nav_page = '<div class="navpage"><span class="current">Page '.$page.' of '.$totalpage.': </span>'; 
    $limit_nav = 3; 
    $start = ($page - $limit_nav <= 0) ? 1 : $page - $limit_nav; 
    $end = $page + $limit_nav > $totalpage ? $totalpage : $page + $limit_nav; 
    if($page + $limit_nav >= $totalpage && $totalpage > $limit_nav * 2){ 
     $start = $totalpage - $limit_nav * 2; 
    } 
    if($start != 1){ //show first page 
     $nav_page .= '<span class="item"><a href="'.sprintf($link, 1).'"> [1] </a></span>'; 
    } 
    if($start > 2){ //add ... 
     $nav_page .= '<span class="current">...</span>'; 
    } 
    if($page > 5){ //add prev 
     $nav_page .= '<span class="item"><a href="'.sprintf($link, $page-5).'">&laquo;</a></span>'; 
    } 
    for($i = $start; $i <= $end; $i++){ 
     if($page == $i) 
      $nav_page .= '<span class="current">'.$i.'</span>'; 
     else 
      $nav_page .= '<span class="item"><a href="'.sprintf($link, $i).'"> ['.$i.'] </a></span>'; 
    } 
    if($page + 3 < $totalpage){ //add next 
     $nav_page .= '<span class="item"><a href="'.sprintf($link, $page+4).'">&raquo;</a></span>'; 
    } 
    if($end + 1 < $totalpage){ //add ... 
     $nav_page .= '<span class="current">...</span>'; 
    }  
    if($end != $totalpage) //show last page 
     $nav_page .= '<span class="item"><a href="'.sprintf($link, $totalpage).'"> ['.$totalpage.'] </a></span>'; 
    $nav_page .= '</div>'; 
    return $nav_page; 
} 
} 


//using 
if(isset($_GET['page'])) { 
    $page = $_GET['page']; 
} else { 
    $page = 1; 
} 
$sql = "SELECT count(*) AS total FROM post ORDER BY idpost DESC"; //please select COUNT is fast 
$result = mysql_query($sql); 
$rows = mysql_fetch_array($result); 
$show = 5; //Show 5 result per page 
$totalpage = ceil($rows['total']/$show); //Total page 
$start = ($page * $show) - $show; //Start result 

$yourQuery = "SELECT * FROM post ORDER BY id LIMIT $start, $show"; 
//Query and show here 

//Show pagination 
echo custom_pagination($page, $totalpage, 'index.php?action=detail&page=%s', $show); 

?> 
+0

고맙습니다 지금까지 :) 이 코드는 SQL 배열 오류를 출력하고 있지만 잘 작동하는 것처럼 보입니다. 하지만 고치기 위해 최선을 다합니다. – Spudster

1

은 $ ID가 페이지 번호 (이 페이지 번호, 특정 레코드의 오히려 고유 ID로 인식 그것 때문에 아마 $ 페이지가이 리팩토링)임을 감안할 때, 당신은 것 마지막 for 루프를 조금 더 제한적으로 변경하십시오.

예를 들어, 1에서 시작하는 대신 현재 페이지보다 5 페이지 먼저 시작하십시오. 그리고 $total으로 끝나는 대신 현재 페이지 다음 5 페이지로 끝납니다.

$start = $id - 5. 
if ($start < 1) { 
    $start = 1; 
} 
$end = $id + 5; 
if ($end > $total) { 
    $end = $total; 
} 

for ($i = $start; $i <= $end; $i++) { 
    // echo pagination options 
} 
당신이 가고 더 가까이 당신이 원하는 곳으로 당신을 얻을 것이다 링크 (제공하기 위해 수정할 수

즉 경우 100 페이지, 페이지 10, 40, 50, 60 쇼 링크로, 30 페이지 20를 표시 심지어는 특정 페이지로 건너 뛰기위한 입력 상자를 제공 할 수도 있습니다.

+0

감사합니다. 이것은 또 다른 좋은 아이디어입니다. D – Spudster

관련 문제