Gallery mit Blätterfunktion umcoden

a*new*found*flo

Erfahrenes Mitglied
Hallo!

Ich habe mir das Codeschnipsel von Dennis Wronka ( .../233977-flexible-gallerie-mit-blaetterfunktion.html)
angesehen und es gefällt mir sehr gut. Gerne würde ich es auch auf meiner Homepage einsetzten. Nur leider habe ich ein Problem.
Die Anzeige der Galleries funktioniert nach alphabethischer Reihenfolge. Das heißt, ich muss die Galleries dementsprechend benennen um sie geordnet zu haben.
Nur will ich nicht jedes mal alle Galleries umbenennen sondern, einfach Ordner anfügen und das Script dreht alles für mich um, sodass die neuesten an erster Stelle sind.
Also wie bei Mysql mit ASC und DESC.

Dafür wollte ich die For-Schleife, die alles ausgibt umändern, nur leider funktioniert das so nicht. Kann mir da bitte jemand helfen?

Original Code:
PHP:
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="gallery.php?gallery='.($x+1).'">'.$name.'</a>';
                if (SHOWPICCOUNT==true)
                    {
                        echo ' - '.count($images->subdirs[$x]->files).' pictures';
                    }
                echo '';
            }

Mein Versuch:
PHP:
		for ($x = count($images->subdirs); $x = 0; $x = $x - 1)
			{
				$name=explode("/",$images->subdirs[$x]->name);
				$name=$name[count($name)-1];
				$name = substr($name, 4,40);
				echo '<a href="index.php?gallery='.($x+1).'&page=photos">'.$name.'</a>';
				if (SHOWPICCOUNT==true)
					{
						echo ' - '.count($images->subdirs[$x]->files).' pictures';
					}
				echo '<br>';
			}

Dankeschön, mfg Flo
 
Das einfachste wird hier wohl sein die Klasse directorylist ein wenig umzuschreiben damit die Sortierung dort nicht alphabetisch sondern nach dem Datum geschieht.

Dabei muesstest Du diesen Teil
PHP:
        if ($sort==true)
            {
                sort($this->files);
                sort($this->subdirs);
            }
durch den folgenden ersetzen
PHP:
        if ($sort==true)
            {
                usort($this->files,"datesort");
                usort($this->subdirs,"datesort");
            }
und dann noch eine die Funktion das Klassenscript (aber nicht in die Klasse selbst).
PHP:
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;
 }
}

Das sollte Dir dann eigentlich Verzeichnisse und Dateien nach dem Zeitpunkt der letzten Aenderung (also wohl dem Upload-Datum) sortiert anzeigen.
Falls er in der falschen Reihenfolge sortieren sollte musst Du einfach nur die Zeilen return -1; und return 1; vertauschen.
 
Danke für deine schnelle Hilfe!

Leider funktioniert das so nicht ganz.

Hier mal meine Directory Klasse:

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,"datesort");
                usort($this->subdirs,"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;
			}
	}
}
?>

Ich beschrifte die Ordner ansich so:

Zahl | Datum | Titel -> 30 - 20.12.2005 - Woauchimmer
mit der Zahl am Anfang woltle ich eigentlich das ganze Ordnen.

Fällt dir dazu eine möglichkeit ein?
Beim original Script ordnet das Script sie automatisch - nur brauche ich nicht z.B.: 1 - 40 sondern umgekehrt: 40 - 1

mfg Flo
 
Schau dir mal dieses Beispiel an:

http://de.php.net/manual/de/function.usort.php#36412

Vor allem diese Zeile dürfte das Richtige sein:
PHP:
usort($this->aData,array($this,"_sortcmp"));

Und damit man auch wirklich einen Unterschied erkennt, lasst es mal nur nach Alter sortieren:
PHP:
$B->aSortkeys = array(
       array('age','ASC')
   );
Einfach das Alte ersetzen
 
Zuletzt bearbeitet:
Danke für deine Hilfe!

Hab das jetzt mal ausprobiert und lade nochmal alle Galleries einzeln rauf...vielleicht liegts auch daran.

Wie funktioniert das mit dem zweiten Code? wo muss ich den hingeben?
 
Zuletzt bearbeitet:
Der zweite Code, bezog sich auf das Beispiel auf der php.net HP. Damit wird nur beweckt, dass nach alter sortiert werden soll. Vorher waren es ja 3 Sortierkriterien. Musst nur das alte Array mit dem neuen (oben) ersetzten.
 
Ok.
Ich habe nun die Sortierfunktion so eingetragen:

PHP:
  usort($this->files,array($this,"_sortcmp")); 
                usort($this->subdirs,array($this,"_sortcmp"));

allerdings sortiert mir das Script immer noch alles von Alt -> Neu
Wie muss ich die zweite Funktion von dir einsetzten, damit er mir alles von Neu -> Alt anzeigt?

Hab nun auch das obrige durch:
PHP:
$B->aSortkeys = array(
       array('age','ASC')
   );
ersetzt, bzw. in verschiedenen Varianten kombiniert, nur leider ändert sich nichts...
 
Zurück