Sitemap Skript mit valider Listenstruktur

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

  • Sitemap Skript mit valider Listenstruktur

    Hallo, ich habe trotz langer Suche kein fertiges Sitemapskript gefunden, welches folgende Eingenschaften erfüllt:

    - Auslesen von Verzeichnissen und den darin enthaltenen Unterverzeichnissen und Dateien von einem bestimmten Startordner ausgehend.
    - ue, oe sowie underscore sollen durch umlaute und leerzeichen ersetzt werden
    - das ganze soll in einer validen Listenstruktur gezeigt werden
    - und natürlich soll bei der Auflistung der Dateien ein entsprechender Hyperlink zu selbiger erfolgen.

    Ich habe mir auch schon selbst eine Funktion zusammengebastelt, aber leider drehe ich mich damit im Kreis.

    Ich bekomme die Links sowie eine valide Listenstruktur einfach nicht hin.

    Hier mal der Code:

    PHP-Code:
    function getDirectory$pfad '.')
        {
            
    $suche = array ('@.jpg@','@.gif@','@.htm@','@.html@','@.php@','@_@','@ue@');
            
    $ersetze = array ('','','','','',' ','ü',);
            
    $ignore = array( '.''..''_notes');
            
    $handler = @opendir$pfad );
        
            while( 
    false !== ( $file readdir$handler ) ) )
            {
                if( !
    in_array$file$ignore ) )
                {
                    if( 
    is_dir"$pfad/$file) )
                    {
                        
    $ausgabe = @preg_replace($suche$ersetze$file);
                        echo 
    "<li><strong>$ausgabe</strong></li>\n";
                        
    getDirectory"$pfad/$file");
                    } 
                    else 
                    {
                        
    $ausgabe = @preg_replace($suche$ersetze$file);
                        echo 
    "<li>$ausgabe</li>\n";
                    }
                }
            }    
            
    closedir$handler );
        } 
    Vielen Dank für alle produktiven Hinweise und Ratschläge.
    Myjestic

  • #2
    Hmm, Projekthilfe? oder kannst du dein Problem etwas konkretisieren?

    Kommentar


    • #3
      Also um das noch ein wenig zu konkretisieren.
      Mein Hauptproblem ist die Darstellung eines valides Listenbaumes.

      Der müsste wie folgt aussehen:


      Code:
      <ul>
         <li>Verzeichnis1
            <ul>
              <li>Datei1</li>
              <li>Datei2</li>
              <li>Datei3</li>
              <li>Datei4</li>
            </ul>
         </li>
       
         <li>Verzeichnis2
            <ul>
              <li>Datei1</li>
              <li>Datei2</li>
              <li>Datei3</li>
              <li>Datei4</li>
            </ul>
         </li>
          .
          .
          .
      </ul>
      Mit meiner Funktion habe ich Probleme die Listen-TAGs an der richtigen Stelle zu positionieren, da die Funktion rekursiv abläuft, ist es vielleicht schlecht, die TAGs innerhalb der Funktion auszugeben, (auf jeden Fall die <ul> TAGs).

      Was meinst Du mit Projekthilfe?

      Kommentar


      • #4
        Hallo!

        Ich hab versucht deinen Code miteinzubauen, habs aber nicht geschafft... Naja, hab dann alles neu geschrieben
        funktioniert aber

        PHP-Code:
        <?php
        // Donnerstag, 19.01.2006 15:01 Uhr
        function getDirContent($dir$ignore)
        {
            
        // Gibt Array mit Verzeichnis-Inhalt zurueck
            
        $content = array();

            
        $dp opendir($dir);

            while (
        $file readdir($dp)) {
                if(!
        in_array($file$ignore)) {
                    if (
        is_dir($dir '/' $file)) {
                        
        // Falls es ein Unterverzeichnis gibt, wird dieses auch ausgelesen
                        
        $content[$file] = getDirContent($dir '/' $file$ignore);
                    } else {
                        
        $content[] = $file;
                    }
                }
            }

            return 
        $content;
        }

        function 
        getFileName($file$replace)
        {
            
        // Nimmt aus 'file.ext' das 'file' heraus
            
        return strtr(substr($file0strrpos($file'.')), $replace);
        }

        function 
        getDirectory($pfad$replace,  $ignore = array('.''..'))
        {
            
        $out '<ul>';

            
        // Gibt einen Verzeichnisbaum aus
            
        $directories getDirContent($pfad$ignore);
            
            foreach (
        $directories as $key => $dir) {
                if (!
        is_array($dir)) {
                    
        $out .= "<li>" getFileName($dir$replace) . "</li>";
                } else {
                    
        $out .= "<li><b>$key</b></li>" getDirectory($pfad '/' $key$replace$ignore);
                }
            }
            
            return 
        $out '</ul>';
        }

        /*
          getDirContent()
            Erster Parameter:  Verzeichnis
            Zweiter Parameter: Array, welches einzelne Zeichen(-ketten) in den Dateinamen austauscht.
            Dritter Parameter: Array, welches spezielle Datei-/Verzeichnisnamen ignoriert beim auslesen.
        */

        // Test:
        $replace = array('_' => '&nbsp;',
                         
        'ü' => 'ue',
                         
        'ö' => 'oe',
                         
        'ä' => 'ae');

        $ignore = array('.''..''_notes');
                         
        print(
        getDirectory('test_dir'$replace$ignore));
        ?>
        Btw. habe auch die Funktion eingebaut, dass man spezielle Verzeichnisse ignorieren kann!

        Hoffe ich habe dir geholfen

        Gruß,
        Flo.
        Zuletzt geändert von Fl0; 19.01.2006, 15:22.

        Kommentar


        • #5
          Sehr schön, wenns funktioniert bitte in die Codesnippets!

          Kommentar


          • #6
            Habs gerade nochmal geändert... hatte die Funktion, die die Dateinamen replaced vergessen. Klappt aber sonst gut.

            http://php-resource.de/forum/showthr...threadid=64897

            Die Funktion, dass die Dateien noch verlinkt sind, ist ja nun nicht mehr viel Arbeit.

            Flo.
            Zuletzt geändert von Fl0; 19.01.2006, 15:02.

            Kommentar


            • #7
              Also vielen Dank erstmal, aber entweder stell ich mich grade zu blöd an, oder irgendwas stimmt noch nicht. Die Hauptfunktion ist doch getDirectory() ich habe es mit Pfadübergabe versucht (auch mit slash), aber leider füllt er den Bildschirm mit Fehlermeldungen bis der Scrollbalken winzig klein ist .

              Wo liegt das Problem?

              Kommentar


              • #8
                Wie rufst du die Funktion genau auf?

                also bei mir geht als Pfad './test_dir' genauso gut wie 'test_dir'.
                und wenn 'test_dir' in 'ordner' ist, geht auch 'ordner/test_dir' als erster Parameter.

                Vielleicht nen Tippfehler, oder nicht ganz kopiert?

                Achso.. sehr wahrscheinlich hast du nen Parameter falsch gesetzt, dann kam das bei mir auch immer

                Du musst alle drei Parameter übergeben, ansonsten muss du den optionalen Parameter von getDirContent() in function getDirectory() setzen. Dann klappts auch mit nur zwei Parametern.

                Gruß,
                Flo.
                -------
                EDIT: Habe das ganze script nochmal leicht geändert, kopiere es nochmal.
                Zuletzt geändert von Fl0; 19.01.2006, 15:22.

                Kommentar


                • #9
                  Sorry, ich sitze heute schon zu lange am Rechner ;-)

                  Ich hatte ?!?! die letze Zeile von Dir so mit übernommen (wo als Verzeichnis counter angegeben ist). Das das die Ausgabezeile ist, habe ich erst jetzt kapiert *andieStirnklopf*

                  Ich habe noch 2 Zeilenumbrüche integriert, damit ich auch im Quellcode sauber sehe was rauskommt, und ich muss sagen "Hut ab!"

                  Einwandfrei. Jetzt muss ich nur noch irgendwie die Links reinbasteltn.
                  Also tausend dank nochmal.


                  Vielleicht sollte im Codeschnipsel Betreff "Sitemap als HTML Liste" stehen. Das nämlich das was ich gestern und heute verzweifelt gesucht habe :-)
                  Zuletzt geändert von Myjestic; 19.01.2006, 15:32.

                  Kommentar


                  • #10
                    Jo das mit dem Zeilenumbruch hab ich mir jetzt mal gespart ^^ Aber ich finds auch besser, wenn der Quellcode übersichtlicher ist...

                    Dann is ja alles gut, wenns klappt ^^

                    Habe den Titel noch schnell geändert.

                    Bitteschön, hab ich gern gemacht Macht doch auch Spaß

                    Liebe Grüße,
                    Flo.

                    EDIT: Mich verwundert, dass PHP bei dir nicht gemeckert hat, dass es kein Verzeichnis 'counter' gibt... Merkwürdig...

                    Kommentar


                    • #11
                      versuche gerade noch die verlinkung reinzubasteln;

                      PHP-Code:
                      .
                      .
                      .
                       function 
                      getDirectory($pfad '.'$replace$ignore)
                      {
                          
                      $out "<ul>\n";

                          
                      // Gibt einen Verzeichnisbaum aus
                          
                      $directories getDirContent($pfad$ignore);
                          
                          foreach (
                      $directories as $key => $dir) {
                              if (!
                      is_array($dir)) {
                                  
                      $out .= "<li><a href=\""$dir ."\">" getFileName($dir$replace) . "</a></li>\n";
                              } else {
                                  
                      $out .= "<li><b>$key</b>\n" getDirectory($pfad '/' $key$replace$ignore);
                              }
                          }
                          return 
                      $out "</ul>\n</li>\n";
                      }
                      .
                      .

                      wenn ich das so mache bleibt das letzte unterverzeichnis leider immer das gleiche. Wie kann ich das anders realisieren?


                      Außerdem habe ich die Struktur der Liste noch etwas verbessert. Leider ist sie noch nicht ganz valide! Einen Fehler hat sie noch, und zwar das letzte </li> TAG ist zuviel und darf nicht mehr ausgegeben werden (siehe geparster Quellcode)
                      Zuletzt geändert von Myjestic; 19.01.2006, 18:06.

                      Kommentar


                      • #12
                        So, habe das ganze nochmal überarbeitet:

                        PHP-Code:
                        <?php
                        // Freitag, 20.01.2006 16:00 Uhr
                        $spacing '    ';
                        $spacing_old '    ';
                        function 
                        getDirContent($dir$ignore)
                        {
                            
                        // Gibt Array mit Verzeichnis-Inhalt zurueck
                            
                        $content = array();

                            
                        $dp opendir($dir);

                            while (
                        $file readdir($dp)) {
                                if(!
                        in_array($file$ignore)) {
                                    if (
                        is_dir($dir '/' $file)) {
                                        
                        // Falls es ein Unterverzeichnis gibt, wird dieses auch ausgelesen
                                        
                        $content[$file] = getDirContent($dir '/' $file$ignore);
                                    } else {
                                        
                        $content[] = $file;
                                    }
                                }
                            }

                            return 
                        $content;
                        }

                        function 
                        getFileName($path$file$replace)
                        {
                            
                        // Nimmt aus 'file.ext' das 'file' heraus
                            //return strtr(substr($file, 0, strrpos($file, '.')), $replace);
                            
                        return '<a href="./' $path '/'$file '" target="_blank">' strtr(substr($file0strrpos($file'.')), $replace) . '</a>';
                        }

                        function 
                        getDirectory($pfad$replace,  $ignore = array('.''..'), $depth)
                        {
                            global 
                        $spacing;
                            
                        $out str_repeat($spacing, ($depth $depth $depth)) . "<ul>\r\n";

                            
                        // Gibt einen Verzeichnisbaum aus
                            
                        $directories getDirContent($pfad$ignore);
                            
                            foreach (
                        $directories as $key => $dir) {
                                if (!
                        is_array($dir)) {
                                    
                        $out .= str_repeat($spacing$depth) . "<li>" getFileName($pfad$dir$replace) . "</li>\r\n";
                                } else {
                                    
                        $out .= str_repeat($spacing$depth) . "<li><b>$key</b>\r\n" getDirectory($pfad '/' $key$replace$ignore$depth 1) . str_repeat($spacing$depth) . "</li>\r\n";
                                }
                            }
                            
                            
                        $out str_repeat($spacing, ($depth $depth $depth)) . $out str_repeat($spacing, ($depth $depth -1$depth)) . "</ul>\r\n" ;
                            return 
                        $out;
                        }

                        /*
                          getDirContent()
                            Erster Parameter:  Verzeichnis
                            Zweiter Parameter: Array, welches einzelne Zeichen(-ketten) in den Dateinamen austauscht.
                            Dritter Parameter: Array, welches spezielle Datei-/Verzeichnisnamen ignoriert beim auslesen.
                        */

                        // Test:
                        $replace = array('_' => '&nbsp;',
                                         
                        'ü' => 'ue',
                                         
                        'ö' => 'oe',
                                         
                        'ä' => 'ae');

                        $ignore = array('.''..''_notes');
                                         
                        print(
                        getDirectory('test_dir'$replace$ignore0));
                        ?>
                        Das klappt bei mir prima ^^

                        Gruß,
                        Flo.

                        Kommentar


                        • #13
                          Feine Sache das ganze, jetzt haut alles Dank. Besten Dank nochmal!

                          Kommentar


                          • #14
                            Kein Problem Macht doch auch irgendwie Spaß ^^

                            Schön, dass alles klappt.

                            Gruß,
                            Flo.

                            Kommentar


                            • #15
                              Hiho,

                              einen Schönheitsfehler hab ich noch zu bemängeln ;-)
                              Die Verzeichnisse bleiben vom replace Array unberührt...
                              Wo muss da noch was gemacht werden?

                              Kommentar

                              Lädt...
                              X