Gallery mit Blätterfunktion umcoden

Du musst statt age natürlich das Feld, d.h. Arraykey, nehmen, nach dem sortiert werden soll. Du musst die Funktio halt noch so umcoden, dass die Zeit der Dateiänderung der aktuellen datei geholt wird, um dann nach dieser zu sortieren.


EDIT:
Eigentlich sollte Dennis' Funktion wunderbar funktionieren. Nimm einfach mal diesen Code + seine Funktion, die du in der Klasse erstellst.
PHP:
usort($this->files,array($this,"datesort"));  
usort($this->subdirs,array($this,"datesort"));
 
Hmm...hab das jetzt in der directory.class.php ausprobiert und direkt in der photos.php
Funktioniert leider noch immer nicht. Irgendetwas is da echt faul. Ich kann machen, was ich will - es ändert sich nichts.
 
Häng doch mal deinen geänderten Code an. Vll hast du auch nur irgendwo eine Kleinigkeit übersehen, oder falsch zusammen gesetzt.
 
Ok :)

Hier die Photos.php :

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Image Galleries</title>
</head>
<body>
<?php
define("IMAGESPATH",'gallery/images');
define("THUMBSPATH",'gallery/thumbs');
define("MAXIMAGESPERROW",5);
define("MAXROWSPERPAGE",4);
define("SHOWPICCOUNT",false);
require("content/directorylist.class.php");
if (SHOWPICCOUNT==true)
    {
        $images=new directorylist(IMAGESPATH,true);
    }
else
    {
        $images=new directorylist(IMAGESPATH,true,true);
    }
if (!empty($_GET['gallery']))
    {
        if (!empty($_GET['image']))
            {
                if (SHOWPICCOUNT==false)
                    {
                        $images->subdirs[$_GET['gallery']-1]=new directorylist($images->subdirs[$_GET['gallery']-1]->name,true,true);
                    }
                $name=explode("/",$images->subdirs[$_GET['gallery']-1]->name);
                $name=$name[count($name)-1];
                echo '<a href="index.php?file=photos&gallery='.$_GET['gallery'].'"><b>'.$name.'</b></a>';
                echo '<span style="margin-left:100px"><span style="margin-right:5px">';
                if ($_GET['image']>1)
                    {
                        echo '<a href="index.php?file=photos&gallery='.$_GET['gallery'].'&image='.($_GET['image']-1).'"><</a>';
                    }
                else
                    {
                        echo '<';
                    }
                echo '</span><span style="margin-left:5px">';
                if ($_GET['image']<count($images->subdirs[$_GET['gallery']-1]->files))
                    {
                        echo '<a href="index.php?file=photos&gallery='.$_GET['gallery'].'&image='.($_GET['image']+1).'">></a>';
                    }
                else
                    {
                        echo '>';
                    }
                echo '</span></span>';
                echo '<a href="index.php?file=photos&">Back to the galleries</a><hr>';
                echo '<img src="'.IMAGESPATH.'/'.$name.'/'.$images->subdirs[$_GET['gallery']-1]->files[$_GET['image']-1].'" alt="'.$images->subdirs[$_GET['gallery']-1]->files[$_GET['image']-1].'">';
            }
        else
            {
                if (!empty($_GET['page']))
                    {
                        $page=$_GET['page'];
                    }
                else
                    {
                        $page=1;
                    }
                $name=explode("/",$images->subdirs[$_GET['gallery']-1]->name);
                $name=$name[count($name)-1];
                echo '<b>'.$name.'</b>';
                $thumbs=new directorylist(THUMBSPATH.'/'.$name,true,true);
                $pages=ceil(count($thumbs->files)/(MAXIMAGESPERROW*MAXROWSPERPAGE));
                echo '<span style="margin-left:100px"><span style="margin-right:5px">';
                if ($page>1)
                    {
                        echo '<a href="index.php?file=photos&gallery='.$_GET['gallery'].'&page='.($page-1).'"><b> < Previous </b></a>';
                    }
                else
                    {
                        echo '<';
                    }
                echo '</span><span style="margin-left:5px">';
                if ($page<$pages)
                    {
                        echo '<a href="index.php?file=photos&gallery='.$_GET['gallery'].'&page='.($page+1).'"><b>Next > </b>  </a>';
                    }
                else
                    {
                        echo '>';
                    }
                echo '</span></span>';
                echo '<a href="index.php?file=photos&">  [Back to the galleries]</a><hr>';
                $x=0;
                while ($x<MAXIMAGESPERROW*MAXROWSPERPAGE)
                    {
                        if (!isset($thumbs->files[$x+($page-1)*MAXIMAGESPERROW*MAXROWSPERPAGE]))
                            {
                                break;
                            }
                        echo '<a href="index.php?file=photos&gallery='.$_GET['gallery'].'&image='.($x+($page-1)*MAXIMAGESPERROW*MAXROWSPERPAGE+1).'"><img style="border:none; margin:5px;" src="'.THUMBSPATH.'/'.$name.'/'.$thumbs->files[$x+($page-1)*MAXIMAGESPERROW*MAXROWSPERPAGE].'" alt="'.$thumbs->files[$x].'"></a>';
                        $x++;
                        if ($x%MAXIMAGESPERROW==0)
                            {
                                echo '';
                            }
                    }
                unset($thumbs);
            }
    }
else
    {
        echo '<b>Galleries</b><hr>';
        for ($x=0;$x<count($images->subdirs);$x++)
            {
			
                $name=explode("/",$images->subdirs[$x]->name);
                $name=$name[count($name)-1];
                echo '<a href="index.php?file=photos&gallery='.($x+1).'">'.$name.'</a><br>';
                if (SHOWPICCOUNT==true)
                    {
                        echo ' - '.count($images->subdirs[$x]->files).' pictures';
                    }
                echo '';
            }
    }
unset($images);
?>
</body>
</html>

PHP:
<?php
class directorylist
{
    var $name;
    var $subdirs;
    var $files;
    
    function directorylist($dirname,$sort=false,$limitrecursion=false,$recursiondepth=0)
    {
        $this->name=$dirname;
        $this->subdirs=array();
        $this->files=array();
        $dir=opendir($dirname);
        while ($file=readdir($dir))
            {
                if (($file!=".") && ($file!=".."))
                    {
                        if (is_dir($dirname."/".$file))
                            {
                                if (($limitrecursion==false) || ($recursiondepth>-1))
                                    {
                                        $this->subdirs[]=new directorylist($dirname."/".$file,$sort,$limitrecursion,$recursiondepth-1);
                                    }
                            }
                        else
                            {
                                if (($limitrecursion==false) || ($recursiondepth>-1))
                                    {
                                        $this->files[]=$file;
                                    }
                            }
                    }
            }
        closedir($dir);
        if ($sort==true)
            {
		
         
     usort($this->files,array($this,"datesort"));  
usort($this->subdirs,array($this,"datesort"));   }
    }

    function findsubdirbyobject($needle)
    {
        for ($x=0;$x<count($this->subdirs);$x++)
            {
                if ($this->subdirs[$x]==$needle)
                    {
                        return $x;
                    }
                else
                    {
                        $val=$this->subdirs[$x]->findsubdirbyobject($needle);
                        if ($val!=-1)
                            {
                                return $x.','.$val;
                            }
                    }
            }
        return -1;
    }

    function findsubdirbyname($needle)
    {
        for ($x=0;$x<count($this->subdirs);$x++)
            {
                if ($this->subdirs[$x]->name==$needle)
                    {
                        return $x;
                    }
                else
                    {
                        $val=$this->subdirs[$x]->findsubdirbyname($needle);
                        if ($val!=-1)
                            {
                                return $x.','.$val;
                            }
                    }
            }
        return -1;
    }

    function findsubdir($needle)
    {
        $vartype=gettype($needle);
        if ($vartype=="string")
            {
                return $this->findsubdirbyname($needle);
            }
        elseif ($vartype=="object")
            {
                return $this->findsubdirbyobject($needle);
            }
        else
            {
                return -1;
            }
    }
}
?>

Danke, mfg Flo
 
Und wo ist die Funktion "datesort", die Dennis dort oben gepostet hat? Die muss natürlich mit in die Klasse. erst dann klappt es.
 
Die Funktion die ich da oben gepostet hab ist glaub ich nicht ganz richtig.
Aber mal ein anderer Ansatz. Wenn ich das richtig sehe werden, zumindest auf Unix-Systemen, die Verzeichnisse in der Erstellungreihenfolge ausgelesen. Das hiesse, dass man auf die Sortierung verzichtet und dann rueckwarts ausgibt um den neuesten Eintrag zuerst zu bekommen.
 
Wenn ich das jetzt mal mit einem der Beispiele auf php.net abgleiche, sieht sie aber richtig aus.
 
Ich bin nicht sicher ob das Array $subdirs einfach so mit meiner Funktion datesort() sortiert werden kann mit der Funktion, denn immerhin handelt es sich da ja um ein Array mit Objekten.
 
Halleluja! Tausend Dank! Es funktioniert! :)

Hier nochmal für alle interessierten der entgültige, richtige Code:

photos.php

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Image Galleries</title>
</head>
<body>
<?php
define("IMAGESPATH",'gallery/images');
define("THUMBSPATH",'gallery/thumbs');
define("MAXIMAGESPERROW",5);
define("MAXROWSPERPAGE",4);
define("SHOWPICCOUNT",false);
require("content/directorylist.class.php");
if (SHOWPICCOUNT==true)
    {
        $images=new directorylist(IMAGESPATH,true);
    }
else
    {
        $images=new directorylist(IMAGESPATH,true,true);
    }
if (!empty($_GET['gallery']))
    {
        if (!empty($_GET['image']))
            {
                if (SHOWPICCOUNT==false)
                    {
                        $images->subdirs[$_GET['gallery']-1]=new directorylist($images->subdirs[$_GET['gallery']-1]->name,true,true);
                    }
                $name=explode("/",$images->subdirs[$_GET['gallery']-1]->name);
                $name=$name[count($name)-1];
                echo '<a href="index.php?file=photos&gallery='.$_GET['gallery'].'"><b>'.$name.'</b></a>';
                echo '<span style="margin-left:100px"><span style="margin-right:5px">';
                if ($_GET['image']>1)
                    {
                        echo '<a href="index.php?file=photos&gallery='.$_GET['gallery'].'&image='.($_GET['image']-1).'"><</a>';
                    }
                else
                    {
                        echo '<';
                    }
                echo '</span><span style="margin-left:5px">';
                if ($_GET['image']<count($images->subdirs[$_GET['gallery']-1]->files))
                    {
                        echo '<a href="index.php?file=photos&gallery='.$_GET['gallery'].'&image='.($_GET['image']+1).'">></a>';
                    }
                else
                    {
                        echo '>';
                    }
                echo '</span></span>';
                echo '<a href="index.php?file=photos&">Back to the galleries</a><hr>';
                echo '<img src="'.IMAGESPATH.'/'.$name.'/'.$images->subdirs[$_GET['gallery']-1]->files[$_GET['image']-1].'" alt="'.$images->subdirs[$_GET['gallery']-1]->files[$_GET['image']-1].'">';
            }
        else
            {
                if (!empty($_GET['page']))
                    {
                        $page=$_GET['page'];
                    }
                else
                    {
                        $page=1;
                    }
                $name=explode("/",$images->subdirs[$_GET['gallery']-1]->name);
                $name=$name[count($name)-1];
                echo '<b>'.$name.'</b>';
                $thumbs=new directorylist(THUMBSPATH.'/'.$name,true,true);
                $pages=ceil(count($thumbs->files)/(MAXIMAGESPERROW*MAXROWSPERPAGE));
                echo '<span style="margin-left:100px"><span style="margin-right:5px">';
                if ($page>1)
                    {
                        echo '<a href="index.php?file=photos&gallery='.$_GET['gallery'].'&page='.($page-1).'"><b> < Previous </b></a>';
                    }
                else
                    {
                        echo '<';
                    }
                echo '</span><span style="margin-left:5px">';
                if ($page<$pages)
                    {
                        echo '<a href="index.php?file=photos&gallery='.$_GET['gallery'].'&page='.($page+1).'"><b>Next > </b>  </a>';
                    }
                else
                    {
                        echo '>';
                    }
                echo '</span></span>';
                echo '<a href="index.php?file=photos&">  [Back to the galleries]</a><hr>';
                $x=0;
                while ($x<MAXIMAGESPERROW*MAXROWSPERPAGE)
                    {
                        if (!isset($thumbs->files[$x+($page-1)*MAXIMAGESPERROW*MAXROWSPERPAGE]))
                            {
                                break;
                            }
                        echo '<a href="index.php?file=photos&gallery='.$_GET['gallery'].'&image='.($x+($page-1)*MAXIMAGESPERROW*MAXROWSPERPAGE+1).'"><img style="border:none; margin:5px;" src="'.THUMBSPATH.'/'.$name.'/'.$thumbs->files[$x+($page-1)*MAXIMAGESPERROW*MAXROWSPERPAGE].'" alt="'.$thumbs->files[$x].'"></a>';
                        $x++;
                        if ($x%MAXIMAGESPERROW==0)
                            {
                                echo '';
                            }
                    }
                unset($thumbs);
            }
    }
else
    {
        echo '<b>Galleries</b><hr>';
		
        for ($x=0;$x<count($images->subdirs);$x++)
            {
			
			
                $name=explode("/",$images->subdirs[$x]->name);
                $name=$name[count($name)-1];
                echo '<a href="index.php?file=photos&gallery='.($x+1).'">'.$name.'</a><br>';
                if (SHOWPICCOUNT==true)
                    {
                        echo ' - '.count($images->subdirs[$x]->files).' pictures';
                    }
                echo '';
            }
    }
unset($images);
?>
</body>
</html>
<?
		 ?>

PHP:
<?php
class directorylist
{
    var $name;
    var $subdirs;
    var $files;
  
   function datesort($val1,$val2)
{
 $time1=filemtime($val1);
 $time2=filemtime($val2);
 if ($time1==$time2)
 {
  return 0;
 }
 elseif ($time1<$time2)
 {
  return -1;
 }
 elseif ($time1>$time2)
 {
  return 1;
 }
}   
    function directorylist($dirname,$sort=false,$limitrecursion=false,$recursiondepth=0)
    {
        $this->name=$dirname;
        $this->subdirs=array();
        $this->files=array();
        $dir=opendir($dirname);
        while ($file=readdir($dir))
            {
                if (($file!=".") && ($file!=".."))
                    {
                        if (is_dir($dirname."/".$file))
                            {
                                if (($limitrecursion==false) || ($recursiondepth>-1))
                                    {
                                        $this->subdirs[]=new directorylist($dirname."/".$file,$sort,$limitrecursion,$recursiondepth-1);
                                    }
                            }
                        else
                            {
                                if (($limitrecursion==false) || ($recursiondepth>-1))
                                    {
                                        $this->files[]=$file;
                                    }
                            }
                    }
            }
        closedir($dir);
        if ($sort==true)
            {
		
         
     usort($this->files,array($this,"datesort"));  
usort($this->subdirs,array($this,"datesort"));   }
    }

    function findsubdirbyobject($needle)
    {
        for ($x=0;$x<count($this->subdirs);$x++)
            {
                if ($this->subdirs[$x]==$needle)
                    {
                        return $x;
                    }
                else
                    {
                        $val=$this->subdirs[$x]->findsubdirbyobject($needle);
                        if ($val!=-1)
                            {
                                return $x.','.$val;
                            }
                    }
            }
        return -1;
    }

    function findsubdirbyname($needle)
    {
        for ($x=0;$x<count($this->subdirs);$x++)
            {
                if ($this->subdirs[$x]->name==$needle)
                    {
                        return $x;
                    }
                else
                    {
                        $val=$this->subdirs[$x]->findsubdirbyname($needle);
                        if ($val!=-1)
                            {
                                return $x.','.$val;
                            }
                    }
            }
        return -1;
    }

    function findsubdir($needle)
    {
        $vartype=gettype($needle);
        if ($vartype=="string")
            {
                return $this->findsubdirbyname($needle);
            }
        elseif ($vartype=="object")
            {
                return $this->findsubdirbyobject($needle);
            }
        else
            {
                return -1;
            }
    }
}

?>


Riesen Dank nochmals!
Mfg der Flo
 
Zuletzt bearbeitet:
Zurück