Webdesign in Siegen

Galerie problem bei Blättern

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Galerie problem bei Blättern

Beitragvon veNom am 29.09.2007, 12:00

Hi,

ich habe mir ja eine Gallery gebastelt und dachte eigtl auch das diese Funktioniert, nun habe ich einen Fehler entdeckt der mich sehr stört.

Wenn ich blättere werden statt 20 40 oder 60 Bilder angezeigt je nachdem welche Werte übergeben werden, vielleicht habt ihr Ideen warum das so sit, hier der Code:
Code: Alles auswählen
<?php

$pics_per_row = 5;
$pic_rows = 4;
if(isset($_GET["sub"])) {
   $mainid = $_GET["sub"];
}
if(isset($_GET["g3txp4g3"])) {
      $id = $_GET["g3txp4g3"];
}
$dir = "pictures/".$mainid."/".$id;   
function scandir($dir,$listDirectories=false, $skipDots=true) {
    $dirArray = array();
    if ($handle = opendir($dir)) {
        while (false !== ($file = readdir($handle))) {
            if (($file != "." && $file != ".." && $file != "thumb") || $skipDots == false) {
                if($listDirectories == false) { if(is_dir($file)) { continue; } }
                array_push($dirArray,basename($file));
            }
        }
        closedir($handle);
    }
    return $dirArray;
}
if(isset($_GET["page"])) {
   $start = $_GET["page"];
   $end = $start + 20;
   $newstart = $end;
   $back = $start - 20;
}
else {
   $start = 0;
   $end = 20;
   $newstart = $end;
   $back = 0;
}

$data = scandir($dir);
$total = count($data);
echo '<div style="float:left;clear:left; text-align: center;"><b>Bilder gesamt: '. $total .'</b></div>';
echo '<div style="float:right;clear:right;">';
if($start > 0) {
echo '<a href="gallery.php?sub='.$mainid.'&g3txp4g3='.$id.'&page='.$back.'">&lt;&lt; zurück</a>&nbsp';
}
if($total >= $end) {
echo '<a href="gallery.php?sub='.$mainid.'&g3txp4g3='.$id.'&page='.$newstart.'">weiter &gt;&gt;</a></div>
<br>';
}
else {
   echo "</div><br>";
}

$output = array_splice($data, $start, $end);
foreach($output as $pic) {
   echo '<div class="pic">
   <table width="100%" height="100%"><tr><td align="center" valign="middle">
   <a href="'.$dir.'/'.$pic.'" target="_blanK">
   <img src="'.$dir.'/thumb/'.$pic.'" border="0">
   </a>
   </td></tr></table>
   </div>
   ';
}
?>
All you get is all you need
Benutzeravatar
veNom
Mitglied
 
Beiträge: 1544
Registriert: 29.12.2005
Wohnort: Wien

Beitragvon Basti am 29.09.2007, 12:54

Kannst du vielleicht mal deinen Quelltext ein wenig kommentieren?

Habe zwar gerade mal drüber geschaut, aber das ganze ist teilweise sehr unübersichtlich und ich kann mir nicht überall erschließen, was du dort gemacht hast.

Wenn das ganze ein wenig nach Funktionen und so strukturiert wird kann ich gerne nochmal darüber sehen, aber das ganze Script ohne Kommentare zu erschließen würde jetzt ein wenig lange dauern.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1864
Registriert: 15.06.2006
Wohnort: Rheinbreitbach

Beitragvon veNom am 29.09.2007, 13:52

Code: Alles auswählen
<?php
// Begrenzungen
$pics_per_row = 5;
$pic_rows = 4;

// ermitteln der kategorie
if(isset($_GET["sub"])) {
   $mainid = $_GET["sub"];
}
/ermitteln der subkategorie
if(isset($_GET["g3txp4g3"])) {
      $id = $_GET["g3txp4g3"];
}
// Ordner der ausgelesen wird
$dir = "pictures/".$mainid."/".$id; 

// Scandir funktion da ich nicht php5 habe... 
function scandir($dir,$listDirectories=false, $skipDots=true) {
    $dirArray = array();
    if ($handle = opendir($dir)) {
        while (false !== ($file = readdir($handle))) {
            if (($file != "." && $file != ".." && $file != "thumb") || $skipDots == false) {
                if($listDirectories == false) { if(is_dir($file)) { continue; } }
                array_push($dirArray,basename($file));
            }
        }
        closedir($handle);
    }
    return $dirArray;
}

// wird genommen wenn man weiter oder zurück klickt
if(isset($_GET["page"])) {
   $start = $_GET["page"];
   $end = $start + 20;
   $newstart = $end;
   $back = $start - 20;
}
else {
   $start = 0;
   $end = 20;
   $newstart = $end;
   $back = 0;
}

// Daten auslesen
$data = scandir($dir);

// Daten zählen
$total = count($data);
echo '<div style="float:left;clear:left; text-align: center;"><b>Bilder gesamt: '. $total .'</b></div>';
// Weiter und zurück buttons
echo '<div style="float:right;clear:right;">';
if($start > 0) {
echo '<a href="gallery.php?sub='.$mainid.'&g3txp4g3='.$id.'&page='.$back.'">&lt;&lt; zurück</a>&nbsp';
}
if($total >= $end) {
echo '<a href="gallery.php?sub='.$mainid.'&g3txp4g3='.$id.'&page='.$newstart.'">weiter &gt;&gt;</a></div>
<br>';
}
else {
   echo "</div><br>";
}
// Ausgabe eingrenzen ... (funktioniert nicht richtig anscheinden)
$output = array_splice($data, $start, $end);

// Ausgabe der Daten/Bilder
foreach($output as $pic) {
   echo '<div class="pic">
   <table width="100%" height="100%"><tr><td align="center" valign="middle">
   <a href="'.$dir.'/'.$pic.'" target="_blanK">
   <img src="'.$dir.'/thumb/'.$pic.'" border="0">
   </a>
   </td></tr></table>
   </div>
   ';
}
?>


Ich hoffe es ist jetzt klarer :)
All you get is all you need
Benutzeravatar
veNom
Mitglied
 
Beiträge: 1544
Registriert: 29.12.2005
Wohnort: Wien

Beitragvon Ingo am 29.09.2007, 14:30

Hoi. Wo ich gerade hier vorbeikugele ... ;o)
Bin keine php-Leuchte, aber vielleicht meintest du
statt $output = array_splice($data, $start, $end)
eher $output = array_slice($data, $start, 20) ? :)
Benutzeravatar
Ingo
Moderator
 
Beiträge: 536
Registriert: 01.04.2007
Wohnort: Neuss/NRW

Beitragvon veNom am 29.09.2007, 14:48

grrrr, das ich darauf nicht gekommen bin ...

DANKE!!! Es funktioniert jetzt :)
All you get is all you need
Benutzeravatar
veNom
Mitglied
 
Beiträge: 1544
Registriert: 29.12.2005
Wohnort: Wien

Beitragvon Basti am 29.09.2007, 16:35

Hehe ... das war mir vorhin auch nicht aufgefallen, manchmal kann die Lösung so einfach sein :P

Naja, gut dass macping es gesehen hat ;)
Da es in PHP beide Funktionen gibt kam ja auch leider keine Fehlermeldung wegen einer unbekannten Funktion.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1864
Registriert: 15.06.2006
Wohnort: Rheinbreitbach

Beitragvon veNom am 29.09.2007, 17:03

Die Funktion war ja richtig es geht glaube ich beides...
All you get is all you need
Benutzeravatar
veNom
Mitglied
 
Beiträge: 1544
Registriert: 29.12.2005
Wohnort: Wien

Beitragvon Ingo am 29.09.2007, 18:37

Jap, ich glaub, das kennen viele. :engel:

Man schreibt n Programm, probiert es aus, irgendwas läuft anders als
beabsichtigt. Nach ner halben Stunde Fehlersuche wird man quasi
'betriebsblind' und entwickelt immer weiter ausgreifende Vermutungen -
bis hin zu Verschwörungstheorien. 8)
Da ist dann so ein Forum ganz praktisch, wo jemand (besser mehrere),
der den Code noch nie gesehen hat, einfach mal den Blick schweifen läßt.

Oh ja, splice sollte hier auch klappen. $data wird ja nur einmal benutzt.
Benutzeravatar
Ingo
Moderator
 
Beiträge: 536
Registriert: 01.04.2007
Wohnort: Neuss/NRW


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast