Kleinen Denkanstoss zur Baumstruktur?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kleinen Denkanstoss zur Baumstruktur?

    Hallo!

    Ich hab mir mal folgendes Script geschrieben:

    PHP-Code:
    <?php
    $ordner
    ="";
    $pfad="../";

    baum($ordner,$pfad);

    function 
    baum($ordner,$pfad)
    {
        
    $folder=$ordner;
        
    $dir=$pfad;
        
        
    $openfolder=$dir.$folder;
        if (
    $handle opendir($openfolder)) {
            while (
    false !== ($file readdir($handle))) {
                if (
    $file != "." && $file != "..") {
                    if(
    is_dir($dir.$folder.$file))
                    {
                        echo 
    $file."<br />";
                        
    $ordner=$folder.$file."/";
                        
    $pfad=$dir;
                        
    baum($ordner,$pfad);
                    }
                    else {
                        echo 
    $file."<br />";
                    }
                }
            }
            
    closedir($handle);
        }
    }
    ?>
    Dieses Script erzeugt z.B. die Ausgabe:

    add.php
    admin
    add_user.php
    delete.php
    edit.php
    highlighter
    filechange.php
    filechange2.php
    frame.php
    highlighter.php
    images
    doc.png
    folder.png
    ...

    Also alle untereinander...

    Wie kann ich es aber machen das die Ausgabe z.b. wie folgt aussieht?

    add.php
    admin
    -add_user.php
    delete.php
    edit.php
    highlighter
    -filechange.php
    -filechange2.php
    -frame.php
    -highlighter.php
    -images
    --doc.png
    --folder.png

    Also mit einrücken (Können Striche oder Leerzeichen sein, eigentlich egal!)

    mfg
    infernalshade

  • #2
    nimm z.b. den kompletten pfad, drösel die tiefe per explode auf und rücke anhand der anzahl von einträgen ein:
    PHP-Code:
    else {
       
    $depth explode ('/',$dir.$folder);
       echo 
    str_repeat("&nbsp;"count($depth)).$file;

    so in der art.

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Danke, Danke, das probier ich gleich mal aus

      mfg

      Kommentar


      • #4
        nimm z.b. den kompletten pfad, drösel die tiefe per explode auf und rücke anhand der anzahl von einträgen ein:
        Dann doch lieber gleich Nested Sets verwenden
        http://www.klempert.de/nested_sets/
        http://dev.mysql.com/tech-resources/...ical-data.html
        http://www.php-resource.de/tutorials/read/21/1/

        Viel Spass

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Ja, das macht ganz besonders viel Sinn
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #6
            Oha, naja so kompliziert muss es dann auch nicht sein!

            Danke jahlives, aber mit der Methode von Kropf haut es schon ganz gut hin

            Muss jetzt nur noch die Leerzeichen durch Grafiken ersetzen!

            Vielen Dank trotzdem!

            mfg

            Kommentar


            • #7
              Wäre auch Blödsinn mit Nested Sets.
              [FONT="Helvetica"]twitter.com/unset[/FONT]

              Shitstorm Podcast – Wöchentliches Auskotzen

              Kommentar


              • #8
                Statt explode und count kannst du auch mal testen, ob substr_count oder count_chars fixer ist (wovon ich ausgehe).

                Kommentar


                • #9
                  Noch eine Möglichkeit: Die Rekursionstiefe übergeben.
                  PHP-Code:
                  function baum($ordner$pfad$depth 0)
                  {
                      
                  // …
                      
                  baum($ordner$pfad$depth+1);
                      
                  // …

                  Kommentar


                  • #10
                    Also mit dem ZweiZeiler von Kropff haut es super hin!

                    Geschwindigkeit ist nicht weiter wichtig, da es nicht allzuviel ist und nur einmal geladen werden muss!

                    @onemorenerd
                    Diese Methode ist auch nicht schlecht, vllt noch bissl kürzer! Mal schaun!


                    Das mit den Grafik haut allerdings nicht ganz hin wie ich das wollte...
                    Es sollte so aussehn wie z.b. im Windows-Explorer! Da ich aber jetzt nur Leerzeichen einrücke (Also lauter gleiche Zeichen) ist dies einfacher als wenn ich verschiedene Zeichen vorne dran machen muss (z.B. ein + und dann --- oder so!)

                    mfg

                    Kommentar


                    • #11
                      Du musst doch nur alle Grafiken gleich breit machen.

                      Kommentar


                      • #12
                        Ja ne das Problem ist ja nicht die Größe der Grafiken, SONDERN das ich ja mit Grafiken nicht mit einem count reinzählen kann weil ja in jeder Zeile eine verschiedene Anordnung von Symbolen vor dem Dateinamen wär!

                        Hier ein Beispiel:

                        +Ordner
                        +-Datei.php
                        +-Unterordner
                        +--Unterordner
                        +Datei1.php

                        Kommentar


                        • #13
                          Die Position der +-Zeichen ist im Windows Explorer aber nicht ganz vorn.
                          Hier hast du was zum Nachbauen.

                          Kommentar


                          • #14
                            Das ist genau das was ich versuche zu bauen, nur will ich das selber realisieren, will ja ein PHP-Progger werden

                            Zumindest bekomm ich auf der Seite schonmal alle benötigten Grafiken!

                            Danke für den Link!

                            mfg
                            infernalshade

                            Kommentar


                            • #15
                              Hi Leute!

                              Bin jetzt so weit:
                              PHP-Code:
                              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                              <html xmlns="http://www.w3.org/1999/xhtml">
                              <head>
                              <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                              <title>Filechange</title>
                              <link href="style.css" rel="stylesheet" type="text/css" />
                              </head>
                              <body>
                              <?php
                              $ordner
                              ="";
                              $pfad="../";

                              baum($ordner,$pfad);

                              function 
                              baum($ordner,$pfad)
                              {
                                  
                              $imgvertline='<img src="treeimg/vertline.gif" height="22" widht="16" />';
                                  
                              $imgmnode='<img src="treeimg/mnode.gif" height="22" widht="16" />';
                                  
                              $imgnode='<img src="treeimg/node.gif" height="22" widht="16" />';
                                  
                              $imgfolder='<img src="treeimg/folderopen.gif" height="22" widht="24" />';
                                  
                              $imgdoc='<img src="treeimg/doc.gif" height="22" widht="24" />';

                                  
                              $folder=$ordner;
                                  
                              $dir=$pfad;
                                  
                                  
                              $openfolder=$dir.$folder;
                                  if (
                              $handle opendir($openfolder)) {
                                      while (
                              false !== ($file readdir($handle))) {
                                          if (
                              $file != "." && $file != "..") {
                                              if(
                              is_dir($dir.$folder.$file))
                                              {
                                                  
                              $depth explode ('/',$dir.$folder);
                                                  
                              $depth=count($depth)-2;
                                                  echo 
                              "<div class='treediv'>";
                                                  if (
                              $depth==1) echo $imgmnode;
                                                  if (
                              $depth==2) echo $imgvertline.$imgmnode;
                                                  if (
                              $depth==3) echo $imgvertline.$imgvertline.$imgmnode;
                                                  if (
                              $depth==4) echo $imgvertline.$imgvertline.$imgvertline.$imgmnode;
                                                  echo 
                              $imgfolder;                    
                                                  echo 
                              $file."</div>";
                                                  
                              $ordner=$folder.$file."/";
                                                  
                              $pfad=$dir;
                                                  
                              baum($ordner,$pfad);
                                              }
                                              else {
                                                  
                              $depth explode ('/',$dir.$folder);
                                                  
                              $depth=count($depth)-2;                    
                                                  if(
                              substr($file,-3)=="php") {
                                                      echo 
                              "<div class='treediv'>";
                                                      if (
                              $depth==1) echo $imgnode;
                                                      if (
                              $depth==2) echo $imgvertline.$imgnode;
                                                      if (
                              $depth==3) echo $imgvertline.$imgvertline.$imgnode;
                                                      if (
                              $depth==4) echo $imgvertline.$imgvertline.$imgvertline.$imgnode;
                                                      echo 
                              $imgdoc;
                                                      echo 
                              "<a href='./highlighter.php?&url=".$folder.$file."' target='hlframe'>".$file."</a></div>";
                                                  }
                                              }
                                          }
                                      }
                                      
                              closedir($handle);
                                  }
                              }
                              ?>
                              </body>
                              </html>
                              Wie es aussieht sieht man aufm Screenshot!

                              Jedoch hab ich noch 2 Probleme....die Vertikalen Linien gehen auch noch runter wenn kein Ordner mehr weiter unten kommt!

                              2. Die Ordner-Bezeichnungen stehen am unteren Rand der Grafiken und nicht mittig, hier meine CSS-Klasse:

                              PHP-Code:
                              .treediv {
                                  
                              font-family:ArialHelveticasans-serif;
                                  
                              font-size:12px;
                                  
                              line-height:22px;
                                  
                              height:22px;
                                  
                              vertical-align:middle;


                              Hat jemand neLösung zu den beiden Problemen?

                              mfg
                              infernalshade
                              Angehängte Dateien

                              Kommentar

                              Lädt...
                              X