Rolf b: Bilder auslesen und auf Seiten verteilen

Beitrag lesen

Friede!

egal ob mit oder ohne Datenbankunterstützung

hat er doch gesagt.

Bei einer DB könntest Du per LIMIT-Klausel erreichen, dass nur der relevante Teil gelesen wird :)

Im Filesystem wirst Du nicht drumherum kommen, immer alle zu lesen und dann den relevanten Ausschnitt anzuzeigen. Ein Verzeichnis mit 4000 Dateien unter Unix ist meines Wissens relativ fix gelesen - unter Windoof würde ich das erstmal testen wollen. Wenn es ZU groß wird, kommt irgendwann der Punkt wo er die Verzeichnisnodes nicht mehr im Cache hat, dann bekommst Du möglicherweise einen Performance-Einbruch.

Du musst jedenfalls etwas in dieser Art tun:

  • Der Anzeigeseite einen URL-Parameter mitgeben, für die Seitennummer.
  • Verzeichnis in ein Array lesen -> $alledateien
  • Dieses Array auf die bekannten Dateitypen filtern (siehe unten)
  • ANZAHL Seiten bestimmen: ceil(count($dateien)/$bilderProSeite)
  • Wenn übergebene Seitennummer < 1 oder > anzahl, irgendwas tun (z.B. Seite 1 anzeigen)
  • Startindex = ($seitenNummer-1) * $bilderProSeite
  • Dann ab diesem Startindex $bilderProSeite Bilder ausgeben.

Filtern kannst Du so.

$bildtypen= array("jpg", "jpeg", "png");
$sichtbareDateien = array_filter($alleDateien, function($datei) use ($bildtypen) { 
   if ($datei == "." || $datei == ".." || $datei == "_notes" || $datei == "Thumbs.db")
      return FALSE;

   $dateiinfo = pathinfo($datei); 
		
	 return in_array($dateiinfo['extension'], $bildtypen);
});

So in etwa. Mit "use ($bildtypen)" machst Du die $bildtypen Variable in der Filterfunktion bekannt und musst das Array nicht für jeden Durchlauf neu erzeugen.

Den Seitennavigator kannst Du als eine Folge von Seitennummern darstellen, von denen jede ein Link auf die entsprechende Seite ist. Kannst Du im PHP mit einer einfachen Schleife realisieren, du musst nur aufpassen, dass Du die Seitennummern konsistent bei 1 oder 0 beginnen lässt. Wird Dir der Navi breit, kannst Du ihn auch durch Buttons wie "erste" "vorige" "nächste" und "letzte" Seite darstellen. Oder ein SELECT Element mit den Seitennummern, bei dem du mit Javascript erkennst dass ein neuer Wert eingestellt wurde.

Egal ob Link oder ein Form mit Buttons - du musst das mit einem GET Request machen (also method="get" im Form), sonst funktioniert der "Zurück" Button des Browsers nur mit Rückfrage an den User.

Und dein Script wird deutlich größer, da kommst Du nicht drumherum.

Rolf