Paginieren funktioniert, aber die Links "springen"

DirkXB12

Grünschnabel
Hallo und guten Abend,

da ich mich vor einiger Zeit hier angemeldet habe, habe ich so einiges gelesen und gelernt bei euch. :)
Mein Kontaktformular habe ich mit eurer Hilfe hinbekommen und auch eine Blätterfunktion für mein Gästebuch hat fast :( geklappt.
Funktionieren tut des wunderbar, doch leider bleiben die Links nicht "statisch" , soll heissen das sich die länge ändert.
So zb. ist der Zustand wenn ich die Seite Aufrufe:

Erste Seite < 1 2 3 > Letzte Seite

Nach klicken auf 2 :

Erste Seite < 1 2 3 4 > Letzte Seite

dann 3 und weiter :

Erste Seite < 1 2 3 4 5 > Letzte Seite
Erste Seite < 3 4 5 6 7 > Letzte Seite
Erste Seite < 4 5 6 7 8
....
Erste Seite < 6 7 8

Ich möchte das aber gerne das die Links immer so ausschauen :

Erste Seite < 1 2 3 4 > Letzte Seite

also mindestens einer und max. 3 , dann sollen die Links nicht länger werden und :
> Letzte Seite

sollte auch immer angezeigt werden.

Hier mein Pagination:
Code:
<?php
// Die function Seitennavigation
function pagination($zeilen, $seite, $pro_seite, $url) {

  $max_ausgabe = $pro_seite;
  $gesamtseiten = ceil(($zeilen - 1) / $pro_seite + 1);

  $aktuelle_seite = $seite ? $seite : 1;
  $linkanzahlausgabe = 2;

  $letzte = $linkanzahlausgabe + $aktuelle_seite;
  if ($letzte > $gesamtseiten) {
    $letzte = $gesamtseiten;
  }

  $startback = $aktuelle_seite - $linkanzahlausgabe;
  if ($startback < 1) {
    $startback = 1;
  }

  $navigationslinks = "&nbsp;";
  if ($gesamtseiten != 1 && $zeilen) {
    $seitenlink = "<a href=\"$url&content=1\"> Erste Seite </a>
                          <a href=\"$url&content=$prevbl\"> &lt; </a>";

    if ($startback > 1) {
      $prevbl = $aktuelle_seite - 1;
      $seitenlink .=  "";
    }

    for ($i = $startback; $i <= $letzte; $i++) {
      if ($aktuelle_seite == "$i") {
        $seitenlink .= "<strong> $i </strong>"; // aktuelle Seite FETT hervorheben
      }
      else {
        $seitenlink .= "<a href=\"$url&content=$i\"> $i </a>";
      }
    }

    if ($letzte < $gesamtseiten) {
      $nextbl = $aktuelle_seite + 1;
      $seitenlink .= "<a href=\"$url&content=$nextbl\"> &gt; </a>
      					 <a href=\"$url&content=$gesamtseiten\"> Letzte Seite </a>";
    }
    $navigationslinks = "<p class=\"smallfont\">Seite: <strong>$aktuelle_seite</strong> von $gesamtseiten<br />$seitenlink</p>";
  }
// Ausgabe der Links
return $navigationslinks;
}
?>

Hoffe jemand hat nen Tipp ... mir raucht die Rübe.
Hätte nicht damit Anfangen sollen ... macht aber irgendwie Spass.

Danke im vorraus .... :)
 
Was meinst du denn mit maximal 3? Dein angezeigtes Beispiel zeigt – nach meinem Verständnis – doch bereits 4 Seiten an.
 
Hallo einfach nur crack,

So zb. ist der Zustand wenn ich die Seite Aufrufe:

Erste Seite < 1 2 3 > Letzte Seite ... sind doch 3 oder ?

das ist mein erstes Beispiel und das hätte ich es gerne ständig sozusagen evtl. 4, auf jedenfall sollen sich die Links NICHT "vermehren" .. diese Lümmels :D
Wenn das mit der genannten Pagination überhaupt möglich ist.
Zumindest möchte immer den < und Letze Seite.
 
Zuletzt bearbeitet:
Zwar eine besonders schöne Lösung, aber eine Lösung:
PHP:
<?php
  function paginate ($rows, $page, $rows_per_page, $url)
  {
    $pages    = ceil($rows / $rows_per_page);
    $min_page = $page - 2;
    $max_page = $page + 2;
    $return   = '';

    $return .= '<a href="' . $url . '&content=1">Erste Seite</a>';


    if ($min_page < 1)
    {
      $return .= '<a href="' . $url . '&content=1">&lt;</a>';
    }
    else
    {
      $return .= '<a href="' . $url . '&content=' . $min_page . '">&lt;</a>';
    }

    for ($i = $min_page; $i <= $max_page; ++$i)
    {
      if ($i < 1 or $i > $pages)
      {
        continue;
      }

      $return .= '<a href="' . $url . '&content=' . $i .'">' . $i . '</a>';
    }

    if ($max_page > $pages)
    {
      $return .= '<a href="' . $url . '&content=' . $pages . '">&gt;</a>';
    }
    else
    {
      $return .= '<a href="' . $url . '&content=' . $max_page . '">&gt;</a>';
    }

    $return .= '<a href="' . $url . '&content=' . $pages . '">Letzte Seite</a>';

    return $return;
  }
 
Dankeschön einfach nur crack :) ,
hoffe Du hast nicht extra meinetwegen Überstunden gemacht ;-)
kam ja doch recht früh Deine Antwort.

Habe Deine Pagination heute gleich mal ausprobiert und muss sagen DIE verstehe ich extrem besser ... :) so als Laie.

Funktioniert .... , doch leider "vermehren" sich auch hier die Links.
Erste und Letzte Seite bleiben stehen wie gewünscht :)

erster Aufruf:
Erste Seite < 1 2 > Letzte Seite

dann einmal klicken auf > oder halt auf 2 :D
Erste Seite < 1 2 3 > Letzte Seite

und dann bleiben 3 Links.
Wäre es möglich das da immer 3 stehen ? Ich finde dieses "springen" recht unschön :(

Hier noch Deine, die ich etwas angepasst habe und auch gleich noch eine Frage dazu habe :

PHP:
<?php
  function pagination ($rows, $page, $rows_per_page, $url)
  {
    $pages    = ceil($rows / $rows_per_page);
    $min_page = $page - 1;
    $max_page = $page + 1;
    $return   = '<p class="smallfont"><a href="' . $url . '&content=1">Erste Seite&nbsp;</a>';

 //   $return .= '';   <<< kann man diese Verlaengerung hier nicht noch sparen ****?


    if ($min_page < 1)
    {
      $return .= '<a href="' . $url . '&content=1"> < </a>';
    }
    else
    {
      $return .= '<a href="' . $url . '&content=' . $min_page . '"> < </a>';
    }

    for ($i = $min_page; $i <= $max_page; ++$i)
    {
      if ($i < 1 or $i > $pages)
      {
        continue;
      }

      $return .= '&nbsp;<a href="' . $url . '&content=' . $i .'">'  . $i .  '</a>&nbsp;';
    }

    if ($max_page > $pages)
    {
      $return .= '<a href="' . $url . '&content=' . $pages . '"> > </a>';
    }
    else
    {
      $return .= '<a href="' . $url . '&content=' . $max_page . '"> > </a>';
    }

    $return .= '<a href="' . $url . '&content=' . $pages . '">&nbsp;Letzte Seite</a></p>';

    return $return;
  }

... hoffe Du konntest meine Frage entdecken. :rolleyes:

Nochmal Dankeschön ....
 
Deine abgewandelte Variante scheint doch jetzt zu funktionieren oder sehe ich das falsch? Ansonsten zu deiner Frage: Natürlich kann man diese Zeile einsparen, aber ich fand es so sauberer. Und nein, ich musste natürlich keine Überstunden einlegen. Für mich ist so etwas eine kleine Spielerei, die ich ohne groß darüber nachzudenken mal hinschreibe.
 
So, nach einigem "testen" ist das doch alles "kaka" ...

Die Pagination von Dir einfach nur crack macht wohl viel aber nicht das was sie soll ... :(
... kommste bestimmt aber selber druff.

Ansonsten vielen Dank für :

"Für mich ist so etwas eine kleine Spielerei, die ich ohne groß darüber nachzudenken mal hinschreibe"

Sorry, aber ein wenig Denken sollte dabei sein, vor allem wenn nicht alle "crack" sind in PHP.

In diesem Sinne nicht böse sein .....
 
So Peter, ich glaube du hast hier etwas nicht erkannt: ich habe dir geholfen und habe dir sogar eine Funktion geschrieben, die genau das erzeugt, was du wolltest. Deshalb halte dich bitte etwas zurück und meckere nicht. Außerdem sehe ich nicht, wo dein Problem ist, denn die Funktion macht genau das, was sie soll.
 
Zurück