Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Dateiliste gruppieren (https://www.delphipraxis.net/65144-%5Bphp%5D-dateiliste-gruppieren.html)

Luckie 12. Mär 2006 23:53

Re: [PHP] Dateiliste gruppieren
 
Jupp, wenn ich wieder Zeit und Lust habe. Versprochen.

MathiasSimmack 12. Mär 2006 23:54

Re: [PHP] Dateiliste gruppieren
 
Oder meinen :stupid:
Code:
   function sortFiles($dirName)
   {
      $fileArray = array();
      $dir = dir($dirName);
      while ($file = $dir->read())
      {
         if (is_file($file))
         {
            $fileDate = gmdate("Y-m-d",filemtime($file));
            $fileArray[] = array($fileDate, $file);
         }
      }

      arsort($fileArray);
      foreach ($fileArray as $file)
      {
         echo "$file[1], $file[0]\n";
      }
   }

   sortFiles(".");

Luckie 12. Mär 2006 23:56

Re: [PHP] Dateiliste gruppieren
 
Da habe ich dann aber nur eine sortierte List und keine gruppierte oder?

MathiasSimmack 12. Mär 2006 23:56

Re: [PHP] Dateiliste gruppieren
 
Na, irgendwas musst du ja auch noch selbst machen. :mrgreen:

Luckie 12. Mär 2006 23:58

Re: [PHP] Dateiliste gruppieren
 
Sortieren ist ja kein Problem, das kann ich ja schon. ;)

Pr0g 13. Mär 2006 00:47

Re: [PHP] Dateiliste gruppieren
 
Ich habe den Code aus diesem Post von dir mal als Vorlage genommen. Da ich nicht genau weiß, ob du die Funktion ListFiles() auch noch anders nutzen willst (etwa anders sortieren), habe ich deine Funktionen als Grundlage für den Code genommen:
Code:
<?php
  // Dateien nach Datum sortiert als Liste auslesen
  $dir = './';
  $files = ListFiles($dir, 'time');
 
  // Dateien nach Jahren gruppiert ausgeben
  $group_year = 0;
  foreach ($files as $file) {
    $file = $dir . $file;
    $file_year = date('Y', filemtime($file));
   
    if ($file_year <> $group_year) {
      if ($group_year > 0) {
        echo '

';
      }
      $group_year = $file_year;
      echo $group_year . '
';
    }

    echo GetTitleFromHTML($file) . '
';
  }
?>
Zum Testen des Scriptes hatte ich mir ein paar Dummyfunktionen geschrieben, wie du an meinem ListFiles siehst wird das Datum zum Sortieren mitgespeichert. Würde dies erhalten bleiben (was deine ja nicht macht soweit ich das sehen konnte), so kann man sich das spätere Auslesen sparen...
Code:
  // --- [Start: Dummy Funktionen zum Test] -----------------------------------
  function ListFiles($dir, $foo) {
    $dh = opendir($dir);
    $files_tmp = array();
    while (($file = readdir($dh)) !== false) {
      if (is_file($file)) {
        $files_tmp[] = array(filemtime($dir . $file), $file);
      }
    }
    arsort($files_tmp);
    $files = array();
    foreach ($files_tmp as $file){
      $files[] = $file[1];
    }
    return $files;
  }
   
  function GetTitleFromHTML($file) {
    return '[' . date('Y-m-d', filemtime($file)) . '] ' . basename($file);
  }
  // --- [Ende: Dummy Funktionen zum Test] ------------------------------------

Luckie 13. Mär 2006 07:06

Re: [PHP] Dateiliste gruppieren
 
Das ist gemial und funktioniert. :P So schön kurz. :thumb: Ich verstehe den Code nur noch nicht ganz. :gruebel:

Pr0g 13. Mär 2006 14:12

Re: [PHP] Dateiliste gruppieren
 
Das Grundprinzip ist recht simple. In der Liste stehen alle Dateien nach Datum sortiert, also die neuste Datei oben. Nun wird geschaut, was fürn Änderungsjahr die Datei hat und eine Gruppe dazu geöffnet (indem das Jahr ausgegeben wird). Nun wird die nächste Datei genommen. Hat sie das gleiche Jahr, dann einfach ausgeben, wenn nicht, dann vorher eine neue Gruppe öffnen (da nun ja keine Datei mehr der ersten Gruppe kommt). Ich habe den Code nochmal was kommentiert:
Code:
<?
  // Dateien nach Datum sortiert als Liste auslesen
  $dir = './';
  $files = ListFiles($dir, 'time');
 
  // Aktuelle Gruppe bekommt das Jahr 0 (bedeutet, dass es noch keine Gruppe
  // vorher gibt - es wäre auch ein anderer Angangswert möglich, hauptsache ist
  // das der Wert nicht das Änderungsjahr einer Datei ist und somit eindeutig
  // als Anfangswert erkennbar bleibt [siehe spätere if Abfrage])
  $group_year = 0;
  // Alle Dateinamen der Liste einzelnd durchgehen und in $file schreiben
  foreach ($files as $file) {
    // Dem Dateinamen direkt den Ordner voransetzen, damit wir eine komplette
    // Pfadangabe haben (wird bspw. für filemtime() gebraucht)
    $file = $dir . $file;
    // Das Änderungsjahr der Datei ermitteln
    $file_year = date('Y', filemtime($file));

    // Hat die Datei ein anderes Änderungsjahr als das der aktuellen Gruppe
    // ($group_year), dann muss eine neue Gruppe angelegt werden
    if ($file_year <> $group_year) {
      // Sollte es sich nicht um die erste Gruppe (daher die 0) handeln, es
      // also schon eine andere Gruppe davor geben, dann die Zeilenumbrüche
      // ausgeben
      if ($group_year > 0) {
        echo '

';
      }
      // Die aktuelle Gruppe bekommt nun das Änderungsjahr der Datei
      $group_year = $file_year;
      // Jahr wird ausgegeben
      echo $group_year . '
';
    }

    // Dateiname, -datum, etc. ausgeben
    echo GetTitleFromHTML($file) . '
';
  }
?>

Luckie 13. Mär 2006 14:18

Re: [PHP] Dateiliste gruppieren
 
Ah. Jetzt hat es "klick" gemacht. ;) Besten Dank.

Pr0g 13. Mär 2006 14:20

Re: [PHP] Dateiliste gruppieren
 
Theoretisch könntest du nun in der Zeile vor Ausgabe des Dateinamens nochmal mit einem ähnlichen Codeblock ansetzen und das ganze wiederum nach Monaten untersortieren, aber das sollte ja nun leicht sein...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:59 Uhr.
Seite 2 von 4     12 34      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz