0251 / 590 837 15
info@a-coding-project.de
;

Order-Funktionalität (CMS)

Code & Blog Logo

Code & Blog Logo

Wie angedroht bekommt unser CMS bei den Dateien ein Order-System verpasst. Dafür erstellen wir heute die Klasse FileServer und ändern die files.php. Das Upload in den Ordnern wird heute jedoch noch nicht gemacht.

Fangen wir mal mit der neuen Klasse FileSever an (/system/classes/fileserver.php). Diese bekommt folgende Methoden:

  • getFiles($dir) – Gibt die Dateien eines Ordners zurück
  • getFolders($dir) – Gibt die Unterordner eines Ordner zurück
  • createFolder($base,$name) – Erstellt ein Verzeichnis

Als Basis für das Heraussuchen der Ordner und Dateien habe ich mir den bestehenden Code genommen und mit is_dir und is_file geprüft, ob es sich um eine Datei oder einen Ordner handelt.

Die Funktion createFolder erstellt mit mkdir einen neuen Ordner mit den Rechten 777.

Und so sieht das ganze in PHP-Code aus:

<?PHP
  class FileServer{

    function getFiles($dir){
      $oDir = openDir("../content/uploads".$dir);
      
      while($item = readDir($oDir)){
        if(is_file("../content/uploads".$dir."/".$item)){
          $res[] = $item;
        }
      }

      closeDir($oDir);
      
      return $res;
    }

    function getFolders($dir){
      $oDir = openDir("../content/uploads".$dir);
      
      while($item = readDir($oDir)){
        if(is_dir("../content/uploads".$dir."/".$item)){
          if($item != "." && $item != ".."){
            $res[] = $item;
          }
        }
      }

      closeDir($oDir);
      
      return $res;
    }

    function createFolder($base,$name){
      return mkdir("../content/uploads/".$base."/".$name,0777);
    }

  }

?>

Fehlt noch der Aufruf in unserer /admin/includes/files.php. Dort habe ich den Unteren Teil komplett überarbeitet.

Die Ordner werden als Breadcrump aufgelistet, so dass eine leichte Navigation ermöglicht wird. In der Breadcrump ist eine Textbox, mit welcher man sofort einen neuen Ordner erstellen kann.

Unter der Breadcrump werden dann erst die Ordner mit Icon angezeigt und darunter die Dateien bisher ohne Icon:

<h1>Dateien</h1>
<form enctype="multipart/form-data" action="/admin/index.php?page=upload" method="post">
Datei: <input type="file" name="file">
<input type="submit" value="Datei hochladen">
</form>

<?php
  $dir = $_GET['dir'];
  if($_POST['newFolder']){
    FileServer::createFolder($dir,$_POST['name']);
  }
  $verzeichnis = openDir("../content/uploads/".$dir);
?>
  <form action="/admin/index.php?page=files&dir=<?PHP echo $_GET['dir']; ?>" method="POST">
  <p>
    Path:
      <?PHP 
        $pre = "";
        foreach(split("/",$dir) as $cDir){
          $path .= "/".$cDir;
          if($path == "/"){
            echo " <a href="/admin/index.php?page=files">/</a>";
            $path = "";
          }
          else{
              echo " <a href="/admin/index.php?page=files&dir=".$path."">".$cDir."/</a>";
          }
        }
      ?>
      <input name="name" style="width:100px;" />
      <input name="newFolder" type="submit" value="Neu" />
  </p>
  </form>
  <ul style="list-style-type:none;">
  <?PHP
    $subFolders = FileServer::getFolders("/".$dir);
    if($subFolders){
      foreach($subFolders as $folder){
        echo "<li>
                <img src="/system/images/icons/folder.png" />
                <a href="/admin/index.php?page=files&dir=".$dir."/".$folder."">".$folder."</a>
              </li>";
      }
    }
  ?>
  </ul>
  <?PHP
    $files = FileServer::getFiles("/".$dir);
    if($files){
      echo "<ul>";
      foreach($files as $file){
        echo "<li><a href="../content/uploads".$dir."/".$file."">".$file."</a></li>";
      }
      echo "</ul>";
       }
    else{
      echo "<p>Es sind keine Dateien vorhanden.</p>";
    }
  ?>

Das wars auch schon für heute. Aber eine Sache möchte ich noch loswerden:

Das CMS geht jetzt langsam in Richtung erster veröffentlichter Version. Fragt doch alle mal ein paar Bekannt, ob die das ganze mal durchtesten. So finden wir bestimmt noch den ein oder anderen Fehlern. Ihr könnt auch ruhig Leute fragen, die bisher kein CMS benutzte haben, ob sie damit klarkommen. Eure Ergebnisse könnt ihr im Forum vorstellen. Die Regisrierung ist dort übrigens nicht oben in der Navi, sondern auch der rechten Seite. Die oben ist für die SteviesWebsite Dienste wie Topliste usw.

Der DBManager wird wahrscheinlich noch nicht in der ersten Version mitdrinsein. Der wird dann erstmal rausgenommen und kommt in der nächsten / übernächsten Version dazu.

Kommentare

Smilie schrieb am 31.10.2009:

Wenn die erste vollständige Version rauskommt, werde ich es sicherlich mal testen. :)

Daniel schrieb am 03.11.2009:

Mal was anderes mein tiny mce bringt immernoch komische Fehlermeldungen beim Seitenbearbeiten --Warning: fread() [function.fread]: Length parameter must be greater than 0 in D:Programmexampphtdocssystemclassespage.php on line 52 -- Aber mit der function ist alles in Ordnung.

Stefan Wienströer schrieb am 03.11.2009:

Die Datei ist leer, oder? Versuch mal nen @ vor dem fread zu machen.

Daniel schrieb am 04.11.2009:

Nein ich habe die testseite2.html berabeiten wollen. Da stand schon Testseite 2 und ich habe noch eine Satz darunter geschrieben. Nach dem druck auf speichern stand dann die Fehlermeldung da. Argh.

Stefan Wienströer schrieb am 04.11.2009:

Kannste mal versuchen einen Cuchstaben von Hand ans Ende der Datei schreiben? Ich könnt mir vorstellen, dass da irgendwas mit dem Auslesen noch nicht passt, wenn der Inhalt eine bestimmte Byte-Zahl hat.

Felix schrieb am 22.09.2010:

Schau mal in der site-edit.php, da köntne noch ein Fehler sein wodurch die Datei nicht geschrieben wird. Die Zeile gleich am Anfang ——- $page-&gt;writeContent(“../”,mysql_real_escape_string($_POST['content'])); } ?&gt; —–