2016-07-01 20 views
1

Ich habe eine Paginierung Code:Stil Paginierung php

//pagination 

$result1=$mysqli->query("SELECT * FROM product"); 
$row_per_page=10 ; 
$rows=$result1->num_rows; 
if ($rows>$row_per_page) $page=ceil($rows/$row_per_page); 
else $page=1; 
if(isset($_GET['start']) && (int)$_GET['start']) 
    $start=$_GET['start']; 
else 
    $start=0; 
$result=$mysqli->query("SELECT * FROM product limit $start,$row_per_page"); 

//End pagination 

while ($rows = $result->fetch_assoc()) { 
    echo $rows['name']; 
} 

$page_cr=($start/$row_per_page)+1; 
for($i=1;$i<=$page;$i++) 
{ 
    if ($page_cr!=$i) echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($i-1)."'>$i&nbsp;</a>"."</div>"; 
    else echo "<div class='pagination'>".$i." "."</div>"; 
} 

Dieser Code erstellen Paginierung wie diese Pagination

Ja, ich will 6 7 8 9 ect entfernen ... und ersetzen mit " ... ". Wenn ich auf Seite 6 klicke, wird 1 2 3 4 5 - 10 11 12 13 usw. entfernt. Es wird nur 6 7 8 9 als Bild angezeigt. [! [Seitenumbruch] [2]] [2]

enter image description here

Ich hoffe, Sie können mein Ideal verstehen, ich versuche das Beste, um Ihnen zu zeigen.

+0

Sie müssen spezifischer mit der Logik sein. Alles scheint willkürlich. Wenn Sie auf Seite 1 sind, zeigen Sie 5 Seiten vom Anfang und 4 Seiten vom Ende an. Wenn Sie auf Seite 6 sind, zeigen Sie 4 Seiten (ab Seite 6) und 4 Seiten vom Ende an. Gibt es eine Regel, die das regelt? Irgendeine Spezifikation? – apokryfos

+0

Sie brauchen nur ein paar mathematische Checks wie 'if ($ i> $ page_cr + 5)' ... –

+0

Ich bearbeite meinen Beitrag, um Sie klarzustellen. Vielen Dank !!! – XCode2015

Antwort

0

Hier ist eine Lösung zu Ihrem Paginierungsproblem, die Art von Lösung Google verwendet, um seine Suchergebnisse paginieren. Im Grunde ist die Idee hinter dieser Lösung:

Zu jedem Zeitpunkt werden maximal 5 Paginierungslinks angezeigt, d. H. Aus der Perspektive der aktuellen Seite werden zwei Vorgänger- und Nachfolgeseiten angezeigt. mit zwei Szenarien Lassen Sie mich diese Sache erklären,

Fall (1): Wenn die Anzahl der Seiten gleich oder weniger als 5 (Lets wir 4 Seiten zu sagen haben)

In diesem Fall haben wir angezeigt werden diese alle Paginierung Links ohne vorangehenden oder nachfolgenden Punkte, wie:

// User is on page 1 
1 2 3 4 
    - - - 

// User is on page 3 
1 2 3 4 
- - - 

// User is on page 4 
1 2 3 4 
- - - 

Fall (2): Wenn die Anzahl der Seiten größer als 5 ist (Lets sagen wir 10 Seiten haben)

In diesem Fall müssen wir dementsprechend wie dies sowohl die Paginierung Links und Punkte anzuzeigen:

// User is on page 1 
1 2 3 4 5 ... 
    - - - - 

// User is on page 5 
... 3 4 5 6 7 ... 
    - - - - 

// User is on page 10 
... 6 7 8 9 10 
    - - - - 

So, nachdem die aktuelle Seitenzahl mit $page_cr=($start/$row_per_page)+1;, der Algorithmus diesem benutzerdefinierten Paginierung System immer so sein würde :

  1. Überprüfen Sie, ob die Anzahl der Seiten größer als 5 ist oder nicht. Wenn es größer als 5 ist, mit Schritt 2 fortfahren, andernfalls mit Schritt 5 fortfahren.

  2. Suchen Sie die Obermenge von Seiten, wie 1-10, oder 1-20 usw. Zum Beispiel, wenn $page = 10 dann diese Obermenge Bereich wäre 1-10. Der Code für diesen Schritt ist dies:

    // Superset range of pages 
    $superset_range = range(1, $page); 
    
  3. die Teilmenge Seitenbereich finden anzuzeigen, wie 1-5 oder 3-7 usw. Wenn beispielsweise $page = 10 dann diese Teilmenge Bereich von 1-5 würde , oder 3-7, oder 6-10 etc., kann es jede folgende fünf Seite zwischen 1 und 10 sein. Passen Sie diesen Bereich auch an, wann immer es notwendig ist. Der Code für diesen Schritt ist dies:

    // Subset range of pages to display 
    $subset_range = range($page_cr - 2, $page_cr + 2); 
    
    // Adjust the range 
    foreach($subset_range as $p){ 
        if($p <= 0){ 
         array_shift($subset_range); 
         $subset_range[] = $subset_range[count($subset_range) - 1] + 1; 
        }elseif($p > $page){ 
         array_pop($subset_range); 
         array_unshift($subset_range, $subset_range[0] - 1); 
        } 
    } 
    
  4. Zeigen Sie die Paginierung Links und Punkte entsprechend.Der Code für diesen Schritt ist dies:

    // Display pagination links and dots 
    if($subset_range[0] > $superset_range[0]){ 
        echo "<div class='pagination'>...&nbsp;</div>"; 
    } 
    foreach($subset_range as $p){ 
        if($page_cr != $p){ 
         echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($p-1)."'>$p&nbsp;</a>"."</div>"; 
        }else{ 
         echo "<div class='pagination'>".$p." "."</div>"; 
        } 
    
    } 
    if($subset_range[count($subset_range) - 1] < $superset_range[count($superset_range) - 1]){ 
        echo "<div class='pagination'>&nbsp;...</div>"; 
    } 
    
  5. Anzeige alle Paginierung Links, um Ihre alten Code verwenden, wie folgt aus:

    // Display all page links 
    for($i = 1; $i <= $page; $i++){ 
        if($page_cr != $i){ 
         echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($i-1)."'>$i&nbsp;</a>"."</div>"; 
        }else{ 
         echo "<div class='pagination'>".$i." "."</div>"; 
        } 
    } 
    

So hier ist der komplette Code:

$result1 = $mysqli->query("SELECT * FROM product"); 
$row_per_page= 10; 
$rows=$result1->num_rows; 

if ($rows > $row_per_page){ 
    $page=ceil($rows/$row_per_page); 
}else{ 
    $page=1; 
} 
if(isset($_GET['start']) && (int)$_GET['start']){ 
    $start=$_GET['start']; 
}else{ 
    $start=0; 
} 
$result=$mysqli->query("SELECT * FROM product limit $start,$row_per_page"); 

while ($rows = $result->fetch_assoc()) { 
    echo $rows['name']; 
} 

$page_cr=($start/$row_per_page) + 1; // Page number 

if($page > 5){ 
    // From the current page's perspective, display two predecessor and successor pages 

    // Superset range of pages 
    $superset_range = range(1, $page); 

    // Subset range of pages to display 
    $subset_range = range($page_cr - 2, $page_cr + 2); 

    // Adjust the range 
    foreach($subset_range as $p){ 
     if($p <= 0){ 
      array_shift($subset_range); 
      $subset_range[] = $subset_range[count($subset_range) - 1] + 1; 
     }elseif($p > $page){ 
      array_pop($subset_range); 
      array_unshift($subset_range, $subset_range[0] - 1); 
     } 
    } 

    // Display pagination links and dots 
    if($subset_range[0] > $superset_range[0]){ 
     echo "<div class='pagination'>...&nbsp;</div>"; 
    } 
    foreach($subset_range as $p){ 
     if($page_cr != $p){ 
      echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($p-1)."'>$p&nbsp;</a>"."</div>"; 
     }else{ 
      echo "<div class='pagination'>".$p." "."</div>"; 
     } 

    } 
    if($subset_range[count($subset_range) - 1] < $superset_range[count($superset_range) - 1]){ 
     echo "<div class='pagination'>&nbsp;...</div>"; 
    } 
}else{ 
    // Display all page links 
    for($i = 1; $i <= $page; $i++){ 
     if($page_cr != $i){ 
      echo "<div class='pagination'>"."<a href='index.php?go=product&start=".$row_per_page*($i-1)."'>$i&nbsp;</a>"."</div>"; 
     }else{ 
      echo "<div class='pagination'>".$i." "."</div>"; 
     } 
    } 
} 
+0

es hilft mir wirklich, so viel Zeit zu sparen. Vielen Dank – XCode2015