2011-11-01 2 views
1

현재 아래의 PHP 페이지 매김 스크립트를 사용하고 있습니다. 페이지 매김은 이전/다음 링크가있는 페이지 당 6 개의 결과를 표시합니다. 나는 페이지 매김이 처음 두 페이지와 마지막 두 페이지에 대한 링크도 표시 할 수 있도록 내가 무엇을 추가 할 수 있는지 아는 사람이 있는지 궁금합니다. http://www.winelog.net/wines/OregonPHP 페이지 매기기는 처음 두 페이지와 마지막 두 페이지를 표시합니다.

$data=file("data.txt"); 
$pages=0; 
foreach($data as $temp){ 
    $x=explode("|",$temp); 
    if($x[0] > 0){ 
     $pages=$pages+1; 
    } 
} 

if($_GET['p']){ 
    $page=$_GET['p']; 
} 

if($_GET['i']){ 
    $index=$_GET['i']; 
} 

if($index == "p"){ 
    $page=$page-1; 
} 
if($index == "n"){ 
    $page=$page+1; 
} 
if($page < 1){ 
    $page=1; 
} 
if($page > $pages){ 
    $page=$pages; 
} 
$line=$data[$page-1]; 
$fields=explode("|",$line); 

표시되는 탐색 :이 예제 페이지의 페이지 매김처럼

$show=6; 
echo "<li><a href='?i=p&p=$page'>&#171; PREV</li></a>"; 

if($page-($show/2) > 1){ 
    $temp=$page-$show; 
    echo "<li><a href='?p=$temp'>...</li></a>"; 
} 

if($page-($show/2) >= 1 && $page+($show/2) <= $pages){ 
    $start=$page-($show/2); 
    $stop=$page+($show/2); 
} 

if($page-($show/2) < 1){ 
    $start=1; 
    $stop=$show; 
} 

if($page+($show/2) > $pages){ 
    $start=$pages-$show; 
    $stop=$pages; 
} 

for($i=$start; $i<=$stop; $i++){ 
    if($page==$i){ 
     echo "<li class='active'>$i</li></a>"; 
    } 
    else{ 
     echo "<li><a href='?p=$i'>$i</li></a>"; 
    } 
} 

if($page+($show/2) < $pages){ 
    $temp=$page+$show; 
    echo "<li><a href='?p=$temp'>...</li></a>"; 
} 
echo "<li><a href='?i=n&p=$page'>NEXT &#187;</li></a>"; 
+0

에 나는 아마도 JQuery와 길을 갈 것입니다 사용자에게 도움이되기를 바랍니다. 그것의 간단하고 청결한. http://plugins.jquery.com/project/pagination –

+1

@Nikhil : 왜 ??가요?! Javascript에 종속성을 생성하면 플러그인이 느려지고 페이지에 모든 데이터를 보내야합니다 (매우 느리고 잠재적으로). 거기에 밀어 넣지 않아도되는 것들을 클라이언트에 밀어 넣지 마십시오! –

답변

1

다음은해야 할 일입니다.

먼저 '페이지'수를 계산하십시오.
10 페이지 미만이라면 모든 페이지를 출력하십시오.

그렇지 않으면 : 현재 페이지에서 출력 - 출력하기 전에 현재 페이지 + 5
5가에 '우선'버튼을 넣어 - 출력 후 페이지 = 1
을하는 '마지막'버튼을 넣어 - 페이지 = 총 페이지 수.

당신은 마지막에서 두 번째 버튼을 원하는 경우에, 다만 페이지 = 페이지의 총 이동 - 등 1

당신은 Zend_Paginator 들여다 할 수 있습니다 - 당신은 전체 젠드를 사용할 필요가 없습니다 그것의 개별적인 부분을 사용하기위한 프레임 워크는 떨어져서 잡아 당길 수 있도록 설계되었습니다.

+0

잘 알려진 ERROR 404 페이지를 반환하므로 Zend_Paginator에 대한 링크를 업데이트하십시오 ... – jagb

1

페이지 매기기 스크립트의 전체 코드는 무료로 제공됩니다. @Stranger StudiosphpPerl 스크립트를 다운로드 할 수 있습니다.

코드 PHP 버전 :

<?php 
//function to return the pagination string 
function getPaginationString($page = 1, $totalitems, $limit = 15, $adjacents = 1, $targetpage = "/", $pagestring = "?page=") 
{  
    //defaults 
    if(!$adjacents) $adjacents = 1; 
    if(!$limit) $limit = 15; 
    if(!$page) $page = 1; 
    if(!$targetpage) $targetpage = "/"; 

    //other vars 
    $prev = $page - 1;         //previous page is page - 1 
    $next = $page + 1;         //next page is page + 1 
    $lastpage = ceil($totalitems/$limit);    //lastpage is = total items/items per page, rounded up. 
    $lpm1 = $lastpage - 1;        //last page minus 1 

    /* 
     Now we apply our rules and draw the pagination object. 
     We're actually saving the code to a variable in case we want to draw it more than once. 
    */ 
    $pagination = ""; 
    if($lastpage > 1) 
    { 
     $pagination .= "<div class=\"pagination\""; 
     if($margin || $padding) 
     { 
      $pagination .= " style=\""; 
      if($margin) 
       $pagination .= "margin: $margin;"; 
      if($padding) 
       $pagination .= "padding: $padding;"; 
      $pagination .= "\""; 
     } 
     $pagination .= ">"; 

     //previous button 
     if ($page > 1) 
      $pagination .= "<a href=\"$targetpage$pagestring$prev\">� prev</a>"; 
     else 
      $pagination .= "<span class=\"disabled\">� prev</span>";  

     //pages 
     if ($lastpage < 7 + ($adjacents * 2)) //not enough pages to bother breaking it up 
     { 
      for ($counter = 1; $counter <= $lastpage; $counter++) 
      { 
       if ($counter == $page) 
        $pagination .= "<span class=\"current\">$counter</span>"; 
       else 
        $pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . "\">$counter</a>";     
      } 
     } 
     elseif($lastpage >= 7 + ($adjacents * 2)) //enough pages to hide some 
     { 
      //close to beginning; only hide later pages 
      if($page < 1 + ($adjacents * 3))   
      { 
       for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++) 
       { 
        if ($counter == $page) 
         $pagination .= "<span class=\"current\">$counter</span>"; 
        else 
         $pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . "\">$counter</a>";     
       } 
       $pagination .= "<span class=\"elipses\">...</span>"; 
       $pagination .= "<a href=\"" . $targetpage . $pagestring . $lpm1 . "\">$lpm1</a>"; 
       $pagination .= "<a href=\"" . $targetpage . $pagestring . $lastpage . "\">$lastpage</a>";  
      } 
      //in middle; hide some front and some back 
      elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) 
      { 
       $pagination .= "<a href=\"" . $targetpage . $pagestring . "1\">1</a>"; 
       $pagination .= "<a href=\"" . $targetpage . $pagestring . "2\">2</a>"; 
       $pagination .= "<span class=\"elipses\">...</span>"; 
       for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++) 
       { 
        if ($counter == $page) 
         $pagination .= "<span class=\"current\">$counter</span>"; 
        else 
         $pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . "\">$counter</a>";     
       } 
       $pagination .= "..."; 
       $pagination .= "<a href=\"" . $targetpage . $pagestring . $lpm1 . "\">$lpm1</a>"; 
       $pagination .= "<a href=\"" . $targetpage . $pagestring . $lastpage . "\">$lastpage</a>";  
      } 
      //close to end; only hide early pages 
      else 
      { 
       $pagination .= "<a href=\"" . $targetpage . $pagestring . "1\">1</a>"; 
       $pagination .= "<a href=\"" . $targetpage . $pagestring . "2\">2</a>"; 
       $pagination .= "<span class=\"elipses\">...</span>"; 
       for ($counter = $lastpage - (1 + ($adjacents * 3)); $counter <= $lastpage; $counter++) 
       { 
        if ($counter == $page) 
         $pagination .= "<span class=\"current\">$counter</span>"; 
        else 
         $pagination .= "<a href=\"" . $targetpage . $pagestring . $counter . "\">$counter</a>";     
       } 
      } 
     } 

     //next button 
     if ($page < $counter - 1) 
      $pagination .= "<a href=\"" . $targetpage . $pagestring . $next . "\">next �</a>"; 
     else 
      $pagination .= "<span class=\"disabled\">next �</span>"; 
     $pagination .= "</div>\n"; 
    } 

    return $pagination; 

} 
?> 

변경 코드는 사용자의 요구에 맞게 일부 CSS을 추가 할 수 있습니다. 페이지 매김에 대한 많은 질문이 있습니다

, 나는 이것이 매김 스크립트의 필요 ..

관련 문제