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 :
Ü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.
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);
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);
}
}
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'>... </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 </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'> ...</div>";
}
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 </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'>... </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 </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'> ...</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 </a>"."</div>";
}else{
echo "<div class='pagination'>".$i." "."</div>";
}
}
}
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
Sie brauchen nur ein paar mathematische Checks wie 'if ($ i> $ page_cr + 5)' ... –
Ich bearbeite meinen Beitrag, um Sie klarzustellen. Vielen Dank !!! – XCode2015