[PHP] Blättern ohne MYSQl

Tab

unlimited
ID: 374854
L
26 Juni 2007
900
71
Guten Abend,

ich bin gerade dabei eine kleine Galerie anzulegen. Ich lese dabei alle Bilder aus einem Ordner aus und zeige diese an. Bis jetzt läuft alles prima. Habe immer drei Bilder nebeneinander, bis zum nächsten <br />

Doch würde ich nun gerne eine Blätterfunktion einbauen. Bedeutet: Nach 4 Reihen ist stopp und es geht auf Seite 2 weiter.

Welche Möglichkeiten habe ich?

Liebe Grüße
 
Wenn die Bilder schön nummeriert sind, kannst du durch schlaues Auslesen des Ordners nur die benötigten Bilder für Seite x laden.

Hast du keine Informationen, musst du eben den ganzen Ordner einlesen und nur die Bilder nutzen, die du für Seite x brauchst. Es bietet sich hier dann ein Cache an, den du nur flushen musst, wenn Bilder hinzukommen oder gelöscht werden.
 
Meine Seite hat momentan folgenden Inhalt.

PHP:
$verz=opendir('galerie/');
$i = 1;

while ($file = readdir ($verz)) {
    if($file != "." && $file != "..") {
        
        if($i%3) {
            echo '<a href=galerie/'.$file.'><img src="galerie/'.$file.'" width="200" height="200" /></a>';
        } else {
            echo '<a href=galerie/'.$file.'><img src="galerie/'.$file.'" width="200" height="200" /></a><br>';
        }
        
        $i++;
    }
}

closedir($verz);
 
Du liest also das komplette Verzeichnis aus und hast - offenbar - keine besonderen Dateinamen.

In diesem Fall eben Cache erstellen:
PHP:
/* Pseudocode */
$fp = opendir("/verz");
$cache = array();
$i = 0;
$page = 0;
$pics_per_page = 12;
while($fp) {
  $pic = readdir($fp);
  if($i++ > $pics_per_page) {
    $page++; $i = 0;
  }

  $cache[$page][] = $pic;
}
write_cache($cache);
Und beim Darstellen:
PHP:
/* Pseudocode */
$cache = read_cache();
$max_page = count($cache);

for($cache[$page] as $pic)
  show_pic($pic);
echo "Goto: 1 2 3 .... $max_page";
 
Sicherlich :LOL: In PHP gibt es kein as in der for-Schleife :ugly:
Sieh dir mal Zeile 1 des Codes an ;)
 
Vielen Dank für die Antwort.

So ganz habe ich das Prinzip noch nicht verstanden.

PHP:
$fp = opendir('galerie/');
$cache = array();
$i = 0;
$page = 0;
$pics_per_page = 3;
while($file = readdir($fp)) {
    
  if($file != "." && $file != "..") {
  
  if($i++ >= $pics_per_page) {
    $page++; $i = 1;
  }

  echo "$i $file<br>";
  $cache[$page][] = $file;
}
}
write_cache($cache);

Ich weiß nun, dass ich eine zweite Seite benötige, da $page =1 ist.

Aber wie kann ich daraus nun die benötigte Blätterfunktion erstellen?

LG
 
Am Ende hast du ein Array, wo genau drinsteht, auf welcher Seite welches Bild is, z.B.
Code:
Array()
{
  [0] => (berge.jpg, meer.jpg, kraftwerk.jpg),
  [1] => (fluss.jpg, wueste.jpg, mir.jpg),
  [2] => (gehen.jpg, die.jpg, ideen.jpg),
  [3] => (aus.jpg, ggggg.jpg)
}
Du könntest sogar die Bildausmaße auslesen lassen und im Cache speichern, aber die scheinen bei dir ja fix mit 200x200 zu sein.
 
Super.

PHP:
$fp = opendir('galerie/');

$i = 0;
$page = 0;
$pics_per_page = 3;
while($file = readdir($fp)) {
    
  if($file != "." && $file != "..") {
  
  if($i++ >= $pics_per_page) {
    $page++; $i = 1;
  }

  //echo "$i $file $page<br>";
  //$cache[$page][] = $file;
  
  $cache = array($page => array($i => $file));
  
  echo $cache["0"]["1"];
  echo $cache["0"]["2"];
  echo $cache["0"]["3"];
  
  
}
}
write_cache($cache);

Funktioniert schonmal. Demnach müsste ich nun auf Seite 1 folgendes ausgeben: $cache["0"]["1"];$cache["0"]["2"];$cache["0"]["3"];

Und auf Seite zwei $cache["1"]["1"];


Doch ist mir noch unklar, wie ich nun die Navigation von Seite 1 zu 2 machen soll.

Liebe Grüße
 
Funktioniert schonmal.
Glaub ich zwar weniger, da du für jede Datei dein Cache-Array wieder überschreibst, aber ok :mrgreen:
Doch ist mir noch unklar, wie ich nun die Navigation von Seite 1 zu 2 machen soll.
Das is das Schlimmste für einen Programmierer, wenn er keine Ahnung hat, was er eigentlich haben will :LOL:

Lass dich vom Forum inspirieren:
https://www.klamm.de/forum/showthread.php?t=8095&page=4711&pp=1 (bewusst gewählt, um zu zeigen, dass das Forum auch nicht perfekt is ;))
 
So funktioniert es :-D

PHP:
$fp = opendir('galerie/');

$get = $_GET['page'];

if (empty($get))
    $get = 0;

$i = 0;
$page = 0;
$pics_per_page = 3;
while($file = readdir($fp)) {
    
  if($file != "." && $file != "..") {
  
  if($i++ >= $pics_per_page) {
    $page++; $i = 1;
  }

  //echo "$i $file $page<br>";
  //$cache[$page][] = $file;
  
  $cache = array($page => array($i => $file));
  
  echo $cache["$get"]["1"];
  echo $cache["$get"]["2"];
  echo $cache["$get"]["3"];
  
  
    
  
}
}

if($page>0) {
    echo "<br /><a href='index.php?page=".$page."'>Seite ".$page."</a><br>";
}

Wobei. Muss das Blättern noch anpassen (Navi)
 
Natürlich. Dann liest du jedes Mal das komplette Verzeichnis ein, obwohl du jedes Mal dasselbe Ergebnis kriegst, so sich an den Bildern nix geändert hat. Das wäre dann ja keine Aufgabe.
 
Gut dann habe ich es wohl nicht verstanden. Wenn alles in einer Datei abgespielt wird, dann wird es ja eh nur einmal geladen?

PS: Irgendwie bekomme ich die Seitennavigation nicht hin. Er soll anzeigen: Seite1 | Seite2 | Seite 3

Liebe Grüße
 
PS: Irgendwie bekomme ich die Seitennavigation nicht hin. Er soll anzeigen: Seite1 | Seite2 | Seite 3
PHP:
echo "Seite1 | Seite2 | Seite 3";
? Passender wäre es sicher, die Ausgabe abhängig von der Anzahl der Seiten zu machen. Aber da hab ich dir ja schon einen Anstoß gegeben.
 
Wäre dann bei der SPL der LimitIterator? :think: Sieht ganz interessant aus.