Tom: DIR Ordner anzeigen

Beitrag lesen

Hello,

das ist wirklich sehr sehr nett von Dir. Das Skript funktioniert auch prima. Ich würde es gerne aber mit "vor" und "zurück" haben. Ist das möglich?

Klar, überlegen wir also mal, wie denn die Steuerung überhaupt funktioniert:

Das Script reagiert intern auf eine Seitennummer. Die wird als Scriptvariable $page gesetzt und davon abhängig werden alle Ausgaben berechnet.

Aber woher bekommt das Sript nun diese Wunschseitennummer?

Mögliche Wege sind

  • über Parameter im Link  (GET)
  • über einen-POST-Parameter, wenn per Formular gearbeitet wird

Wenn per GET eine Seitennummer übermittelt wurde, diese benutzten

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

woher nimmt die Seite aber die Nummern?

Die haben wir vorher als Links verpackt angeboten.

Wenn wir jetzt anstelle der aller möglichen Seitennummern also nur die für  [ZURÜCK] und [WEITER] anbieten würden, dann hätten wir das erreicht, was Du haben wolltest.

Wie müssen also an der Passage

Links aufbauen

echo "    <ul class="pagelink">\r\n";

for ($i = 0; $i <= $maxpage; $i++)
{
    echo "        <li class="pagelink"><a href="{$_SERVER['SCRIPT_NAME']}?page=$i">".($i+1)."</a></li>\r\n";
}

echo "    </ul>\r\n";

arbeiten. Wie können wir nun erreichen, dass immer nur der Link _vor_ der aktuellen Seite und der Link _nach_ der aktuellen Seite generiert werden?

Wir fügen in die For-Schleife einfach eine weitere Bedingung ein:

for ($i = 0; $i <= $maxpage; $i++)
{
    if($i == ($page-1) or $i == ($page + 1))
    {
        echo "        <li class="pagelink"><a href="{$_SERVER['SCRIPT_NAME']}?page=$i">".($i+1)."</a></li>\r\n";
    }
}

So! Nun haben wir nur noch zwei Links erzeugt. Es stehen aber immer noch die Nummern drin, und nicht [ZURÜCK] oder [WEITER]. Um dies zu erreichen, müssen wir die Bedingung in zwei zerlegen:

for ($i = 0; $i <= $maxpage; $i++)
{
    if($i == ($page-1))
    {
        echo "        <li class="pagelink"><a href="{$_SERVER['SCRIPT_NAME']}?page=$i">[ZURÜCK]</a></li>\r\n";
    }
    elseif($i == ($page + 1))
    {
        echo "        <li class="pagelink"><a href="{$_SERVER['SCRIPT_NAME']}?page=$i">[WEITER]</a></li>\r\n";

}
}

Nun haben wir (hoffentlich, ich habe es nicht auf Fehlerfreiheit überprüft) schon mal das, was wir haben wollten. Für die beiden Texte [ZURÜCK] und [WEITER] werden nun die Links auf die passenden Seitennummern erzeugt.

Und wenn wir nun noch weiterdenken, könnten wir uns eigentlich auch die Schleife sparen...

if($page > 0)
{
    echo "        <li class="pagelink"><a href="{$_SERVER['SCRIPT_NAME']}?page=".($i-1)."">[ZURÜCK]</a></li>\r\n";
}

if($page < $maxpage)
{
    echo "        <li class="pagelink"><a href="{$_SERVER['SCRIPT_NAME']}?page=".($i+1)."">[WEITER]</a></li>\r\n";
}

Ersetzen wir die Schleife durch die obigen beiden Bedingungen, sollten wir auch das haben, was wir wollten. Achte auf die Klammerung der Therme ($i+1) und ($i-1). Sonst funktioniert es nicht, sie direkt in die teytausgabe einzubinden. PHP muss hier das Ergebnis der Berechnung in ein Literal umwandeln, bevor man es verknüpfen kann.

Viel Spaß weiterhin

PS: unter http://selfhtml.bitworks.de/snippets/directories_auslesen/readdir_&_blaettern/filelist_paginated.php habe ich noch ein bisschen weiter damit herumgespielt. Das wäre dann die nächste Stufe: Berechnung aud Ausgabe besser voneinander zu trennen...

Liebe Grüße aus Syburg

Tom vom Berg

--
Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de