Dateimanager sortierung

dreambaser

Erfahrenes Mitglied
Hallo Leute,

Ich schreibe gerade an einem Dateimanager und habe das Problem, das die Ordner bzw. die dateien durcheinander gewürfelt werden.

Kennt jemand ne Möglichkeit, das zuerst die Ordner und dann die dateien gelistet werden ?

Vielen Dank;

mfg Dream
 
Eine Möglichkeit wäre, den Namen der Objekte, ihre Pfade und ihren Typ in einem Feld zu speichern, und dies nach den entsprechenden Kriterien zu sortieren. Dabei könntest du dir die Array-Funktionen von PHP zu Nutze machen.
 
darüber habe ich auch schon nachgedacht, allerdings ist die sortierung dann nur alphabetisch. Das was ich gerne haben will, ist das die Verzeichnisse als erstes gelistet werden und dann die dateien.

Hier mal den code dazu, vielleicht hat einer von euch ne Lösung.

PHP:
$dir = dir($current_path);
				 while ($file = $dir->read()) {
      $file_size = number_format(filesize($current_path . '/' . $file)). ' bytes';
	  $permissions = tep_get_file_permissions(fileperms($current_path . '/' . $file));
	  $filetype = filetype($current_path . '/' . $file);
	  $file_time = filemtime($current_path . '/' .$file);
	  $goto_link = substr($current_path, 0, strrpos($current_path, '/'));

Danke für eure Hilfe.
 
Meine Idee war, dass auch die Information, ob es sich um eine Datei oder ein Verzeichnis handelt, ebenfalls in dem Feld aufgenommen wird.
 
Du meinst dieses is_dir bzw. is_file oder so ?

Damit wäre es auch möglich, nur hab ich damit keine Erfahrung bisher gesammelt... hast du da ne möglichkeit ?
 
Probier mal Folgendes:
PHP:
<?php
	$i = 0;
	$current_path = '.';
	$dir = dir($current_path);
	while( $file = $dir->read() ) {
		$current_item = $current_path . '/' . $file;
		$items[$i]['name']  = $file;
		$items[$i]['size']  = filesize($current_item);
		$items[$i]['perms'] = fileperms($current_item);
		$items[$i]['type']  = filetype($current_item);
		$items[$i]['time']  = filemtime($current_item);
		$goto_link = substr($current_path, 0, strrpos($current_path, '/'));
		$i++;
	}
	function sort_by_type($a, $b) {
		return strnatcasecmp($a['type'], $b['type']);
	}
	usort($items, 'sort_by_type');
	[…]
?>
 
also soweit sogut ... ich hab es zwar ein wenig anders auch hinbekommen, aber das ist noch nicht ganz das was ich haben will. Jetzt werden zwar alle nach dem alphabet geordnet allerdings wird noch nicht unterschieden, ob es ein ordner ist oder nicht.

Mal ein Beispiel wie ich das meine:

Ordner 1
Ordner 2
Ordner 3
Ordner 4
File 1
File 2
File 3
File 4

so sollte das dann aussehen. Nur momentan schmeisst der alles durcheinader.

Ich hab es auch schon so versucht, den Filetype zu definieren, allerdings werden dann nur ümbrüche dargestellt.

Hast du noch ne andere Idee ?;

Vielen Dank
 
Problem gelöst.

Ich habe da etwas vergessen, daher hat er das nicht so gemacht, wie ich wollte. Hier mal der komplette Code dazu:

PHP:
  $dir = dir($current_path);
				 while ($folder = $dir->read()) {
      $folder_size = number_format(filesize($current_path . '/' . $folder)). ' bytes';
	  $folder_permissions = tep_get_file_permissions(fileperms($current_path . '/' . $folder));
	  $folder_type = filetype($current_path . '/' . $folder);
	  $folder_time = filemtime($current_path . '/' .$folder);
	  $folder_link = substr($current_path, 0, strrpos($current_path, '/'));
	
	  $contents[] = array('name' => $folder,
                            'is_dir' => is_dir($current_path . '/' . $folder),
                            'last_modified' => $folder_time = filemtime($current_path . '/' .$folder),
                            'size' => $folder_size,
                            'permissions' => $folder_permissions);
}
	 function tep_cmp($a, $b) {
      return strcmp( ($a['is_dir'] ? 'D' : 'F') . $a['name'], ($b['is_dir'] ? 'D' : 'F') . $b['name']);
    }
    usort($contents, 'tep_cmp');
	
####################

	for ($i=0, $n=sizeof($contents); $i<$n; $i++) {
	
	 if ($contents[$i]['is_dir']) {
	echo '<a href="'.$_SERVER['PHP_SELF'].'?path='.session_id().'&current_path='.$current_path.'/'.$contents[$i]['name'].'&selected_box=tools">'.$contents[$i]['name'].'</a><br>';
	} else {
	 echo $contents[$i]['name']."<br>";
	}
	}

Vielen Dank nochmal für den Denkanstoß ...

mfg greetz da Dream
 
Zurück