2010-01-28 3 views
3

PHP로 페이징을 구현하고 싶습니다. 내가 db에서 몇 가지 결과 집합을 가지고, 그것을 배열하자. 당신이 선택하면 나는 다음의PHP로 간단한 페이징

"< < 1,2,3 ..... 20 >>"

해야 4 개 페이지 당 레코드와 페이지 번호를 표시해야합니다 페이징이 필요 2 페이지는 다음 형식이어야한다

는 "<는 3,4,5 ..... 20 >> <"

너희들이 좀 페이징 개념을 제안 할 수 있습니다이 다음 구현하는 방법?

답변

3

실제로이 경우 LIMIT 절을 SQL에 사용할 수 있습니다.

Here의 시작을 알맞은 튜토리얼입니다.

0

표준 라이브러리를 사용하는 것이 좋습니다. Ignacio는 PEAR :: Pager 라이브러리를 추천했지만 Zend Framework의 Zend_Paginator는 부분적입니다.

다양한 어댑터가 라이브러리에 포함되어 있으며 Github에는 다양한 데이터 소스를 사용하는 어댑터가 있습니다.

0

Db에서이를 관리하면 데이터 액세스 코드에서 pageSize, PageNumber, sortOrder와 같은 인수를 사용하는 함수를 사용할 수 있습니다. 귀하의 SQL 결과를 얻기 페이지 수에 따라 위에서 언급 한 바와 같이 제한을 사용하여 간단하다

SELECT * FROM your_table WHERE condition = true ORDER BY some_field LIMIT 100, 10 
1

같은 것을 볼 수 있었다. 루프를 사용하여 페이지 번호를 인쇄 할 수 있습니다.

먼저, 쿼리 문자열에서 페이지 번호가 page = 2로 전송된다고 가정하십시오.

$pagenum=(int)$_GET['page']; 
if($pagenum<1){ $pagenum=1; }//perform a sanity check. You might also query to find the max page number and see that it's not higher than that. 

당신은 다음과 같이 SQL 쿼리에 pagenum를 삽입 오프셋 (offset), 페이지 당 결과를 뺀 페이지 당 결과 수로 곱한 후.

거의 모든 경우에 한하지만 당신이 변수가합니다 ((INT 캐스팅에 기인하는 int입니다 확신 이후 엄격하게 필요는 없습니다,이 경우에는 물론 SQL에 제공된 매개 변수를 사용하여 퍼팅을 위해 준비된 문을 사용한다) 부분). 단지 그것을 강조해야했습니다.

페이지 당 4 개의 항목이 있다고 가정 해보십시오. LIMIT에 두 개의 인수를 사용하거나 LIMIT 및 OFFSET을 별도로 사용할 수 있습니다. 제한을 사용하는 경우 첫 번째 숫자는 오프셋이고 두 번째 숫자는 결과의 수입니다.

$offset=$pagenum*4-4;//this means for page 1, start on 0, page 2 starts on 4, etc. 
$sql="select * from the_table limit $offset,4"; 

이렇게 주어진 페이지 번호에 대한 데이터를 얻는 방법입니다. 그런 다음 페이지 번호를 인쇄하는 것은 다른 이야기입니다. 이 예제는 위에서 설명한대로 페이지를 표시하는 방법을 기반으로합니다.

for($i=pagenum+1;$i<20;$i++){ 
    if($i<$pagenum+4){ ?> 
    <a href='stuff.php?page=<?php echo $i;?>'><?php echo $i;?></a> 
    <?php } elseif($i==$pagenum+4) { ?> 
    ... <?php } elseif($i==20){ ?> 
    <a href='stuff.php?page=20'>20</a> 
    <?php } ?>