Ordner, Dateien und JavaScript Explorer Ansicht

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ordner, Dateien und JavaScript Explorer Ansicht

    Hallo, ich habe eine Funktion gebaut, die mir alle Ordner und Datein ausliest, das klappt auch ohne Probleme, jedoch kann ich daraus kein "Explorer-Menu" machen, da sich die <div> überschneiden. Also habe ich daraus eine Klasse gebaut , wo alles in einem extra Div ist. Jedoch bricht meine Klasse ab bzw sie liest keine Datein in unterordnern aus und Ordner werden nur bis Ebene 2 gelesen.

    So soll das ganze aussehen:
    <div>
    Ordner1
    <div>
    SubOrdner1
    file1
    </div>
    Ordner2
    </div>

    somit kann ich dann mit JS eine Funktion bauen, die mir bei Klick auf Ordner1 den Sub-Inhalt anzeigt.

    Hier meine Funktion die Funktioniert, jedoch wo so ein Klapp menu nicht realisiert werden kann(?)

    Quellcode

    1. function lese_verzeichnisse($ordner, $links = 50) {
    2. $verzeichnis = opendir(escapeshellcmd($ordner));
    3. while ($datei = readdir($verzeichnis))
    4. {
    5. if ($datei != "." && $datei != "..") {
    6. if (is_dir($ordner."/".$datei)) {
    7. echo '<span style="padding-left: '.$links.'px"><b><img
    8. src="/public/images/icons/folder.png">';
    9. echo '<a href="'.$ordner."/".$datei.'">'.$datei.'</a>';
    10. echo '</b></span><br />';
    11. lese_verzeichnisse($ordner."/".$datei, $links+20);
    12. } else {
    13. echo '<span style="padding-left: '.$links.'px"<img
    14. src="/public/images/icons/layers.png">';
    15. echo '<a href="'.$ordner."/".$datei.'">'.$datei.'</a>';
    16. echo '</span><br />';
    17. }
    18. }
    19. }
    20. closedir($verzeichnis);
    21. }
    Alles anzeigen


    Hier ist nun meine Klasse, womit ein "Aufklapp-Menu" realisiert werden kann, die jedoch abbricht.

    Quellcode

    1. <?php
    2. class ReadFolder
    3. {
    4. private $hqFolder;
    5. private $subFolder;
    6. private $fileFolder;
    7. private $hqLinks;
    8. private $subLinks;
    9. private $fileLinks;
    10. private $path;
    11. public function __construct($folder, $links = 50)
    12. {
    13. $this->hqFolder = $folder;
    14. $this->hqLinks = $links;
    15. $this->path = opendir(escapeshellcmd($this->hqFolder));
    16. self::getHq();
    17. }
    18. private function getHq ()
    19. {
    20. $path = opendir(escapeshellcmd($this->hqFolder));
    21. while ($datei = readdir($path)) {
    22. if ($datei != "." && $datei != ".." && $datei != ".htaccess") {
    23. if (is_dir($this->hqFolder ."/".$datei)) {
    24. echo "
    25. <div id=\"folder\" style=\"padding-left: ".$this->hqLinks."px;\">
    26. <table>
    27. <tr>
    28. <td><img src=\"/public/images/icons/folder.png\"></td>
    29. <td><a onclick=\"toggleDisplay(this, 'folder$folderUnique')\" href=\"#\">+ <b>$datei</b></a></td>
    30. </tr>
    31. </table>
    32. </div>";
    33. self::getSub($this->hqFolder."/".$datei, $this->hqLinks+20);
    34. } else {
    35. self::getFiles('hq');
    36. }
    37. }
    38. }
    39. }
    40. private function getSub($folder, $links)
    41. {
    42. $this->subLinks = $links;
    43. $this->subFolder = $folder;
    44. echo "<div id=\"folder\" style=\"padding-left: ".$this->subLinks."px;\">";
    45. $path = opendir(escapeshellcmd($this->subFolder));
    46. while ($datei = readdir($path)) {
    47. if ($datei != "." && $datei != ".." && $datei != ".htaccess") {
    48. if (is_dir($this->subFolder ."/".$datei)) {
    49. echo "
    50. <table>
    51. <tr>
    52. <td><img src=\"/public/images/icons/folder.png\"></td>
    53. <td><a onclick=\"toggleDisplay(this, 'file$folderUnique')\" href=\"#\">+ <b>$datei</b></a></td>
    54. </tr>
    55. </table>";
    56. } else {
    57. self::getFiles('sub');
    58. }
    59. }
    60. }
    61. echo "</div>";
    62. }
    63. private function getFiles($src)
    64. {
    65. switch (true) {
    66. case $src == 'hq':
    67. $this->fileFolder = $this->hqFolder;
    68. $this->fileLinks = $this->hqLinks+20;
    69. break;
    70. case $src == 'sub':
    71. $this->fileFolder = $this->subFolder;
    72. $this->fileLinks = $this->subLinks+20;
    73. break;
    74. }
    75. $this->fileLinks = $links;
    76. echo "<div id=\"folder$fileUnique\" style=\"padding-left: ".$this->fileLinks."px; display: block;\">";
    77. $path = opendir(escapeshellcmd($this->fileFolder));
    78. while ($datei = readdir($path)) {
    79. if ($datei != "." && $datei != ".." && $datei != ".htaccess") {
    80. if (!is_dir($this->hqFolder ."/".$datei)) {
    81. echo "
    82. <table>
    83. <tr>
    84. <td><img src=\"/public/images/icons/layers.png\"></td>
    85. <td><a href=\"$this->fileFolder/$datei\">$datei</a></td>
    86. </tr>
    87. </table>";
    88. }
    89. }
    90. }
    91. echo "</div>";
    92. }
    93. public function __destruct()
    94. {
    95. closedir($this->path);
    96. }
    97. }
    Alles anzeigen



    Danke für die Hilfe.

    so long JFoX
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • d0nut schrieb:

    Ist ja jetzt erstmal viel Code. Bevor ich das alles lese: Du suchst nicht zufälligerweise genau das hier: [coderwiki]HowTos/PHP-Ordner-auslesen[/coderwiki]

    BTW: self:: benutzt man eigentlich bei statischen, nicht instanzierten Klassen. Für deine Anwendung ist $this-> besser


    Was sind statische, nicht instanzierte Klassen? =)


    Zum Code:
    Ich denke, du müsstest vllt. (ohne den Code zu lesen) rekursiv alle Unterordner durchgehen =)
    Glaubst du, dass es sinnvoll ist, bei dieser Anwendung Klassen zu verwenden? Ich hab sowas ma selber gemacht, wollte aber keine Klasse nehmen, weil mir das ziemlich spezifisch vorkam...
  • Ich teste gerade das von dem wiki :) Klar ist es sinnvoll eine klasse zu verwenden, weil da noch mehr dahinter steckt :) ich habe lediglich das wesentliche extrahiert.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • So ich habe jetzt mal den Code aus dem Wiki genommen und ihn um JS erweitert ohne erfolg. Ich das Quasi so haben, das es aussieht wie ein einem Explorer (mit dem aufklappen). Jedoch klatschen sich immer diese blöden Div-Ids so das jeder unterordner keine eindeutige mehr hat....

    Hier ist der PHP-Code.

    Quellcode

    1. <?php
    2. //require_once('support/model/folder.php');
    3. //require_once('support/model/old.php');
    4. //$display = new ReadFolder("application/modules/support/download");
    5. //lese_verzeichnisse("application/modules/support/download");
    6. function ordnerinhalt($ordner='application/modules/support/download', $folderCount = 0)
    7. {
    8. $newFolderCount = $folderCount;
    9. $content = "";
    10. $handle = opendir($ordner);
    11. while ($file = readdir ($handle)) {
    12. $folderCount++;
    13. if($file{0} != '.' && $file{0} != '..') { //Versteckte Dateien nicht anzeigen
    14. if(is_dir($ordner.'/'.$file)) {
    15. $folderArray[] = $file;
    16. } else {
    17. $fileArray[] = $file;
    18. }
    19. }
    20. }
    21. closedir($handle);
    22. //Erst die Ordner ausgeben
    23. if(isset($folderArray)) {
    24. asort($folderArray);
    25. foreach($folderArray as $row) {
    26. $newFolderCount++;
    27. $sub = $newFolderCount-1;
    28. $content .= '<a href="#" onclick="toggleDisplay(this, \''.$newFolderCount.'\')"><b>+ '.$row.', '.$newFolderCount.', sub: '.$sub.'</b></a><br />';
    29. $content .= '<div id="'.$sub.'" style="padding-left:10px;color:#afafaf; display:block;" />'; //Unterordner nach Rechts einr�cken
    30. $content .= ordnerinhalt($ordner.'/'.$row, $folderCount = $newFolderCount); //rekursive Funktion
    31. $content .= '</div>';
    32. }
    33. }
    34. //Dann die Dateien ausgeben
    35. if(isset($fileArray)) {
    36. asort($fileArray);
    37. foreach($fileArray as $row) {
    38. $content .= '<a href="'.$ordner.'/'.$row.'">'.$row.'</a><br />'; //Dateien verlinken
    39. }
    40. }
    41. return $content;
    42. }
    43. echo ordnerinhalt();
    44. ?>
    Alles anzeigen


    Und der dazugehörige JS-Code:

    Quellcode

    1. function toggleDisplay(src, divId)
    2. {
    3. var divStyle = document.getElementById(divId).style;
    4. if(divStyle.display)
    5. {
    6. divStyle.display = "";
    7. src.innerHTML = "- " + src.innerHTML.substr(2);
    8. }
    9. else
    10. {
    11. divStyle.display = "none";
    12. src.innerHTML = "+ " + src.innerHTML.substr(2);
    13. }
    14. return false;
    15. }
    Alles anzeigen


    Ich bin langsam mit meinem ideen am ende das resultat ist immer das selbe alles klatscht sich.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Verstehe deine Rechnungen mit +/-1 nicht... egal.. mit einer Referenzvariable ist das doch viel schöner :)

    Quellcode

    1. function ordnerinhalt($ordner='application/modules/support/download', &$folderCount)
    2. {
    3. $newFolderCount = $folderCount;
    4. $content = "";
    5. $handle = opendir($ordner);
    6. while ($file = readdir ($handle)) {
    7. $folderCount++;
    8. if($file{0} != '.' && $file{0} != '..') { //Versteckte Dateien nicht anzeigen
    9. if(is_dir($ordner.'/'.$file)) {
    10. $folderArray[] = $file;
    11. } else {
    12. $fileArray[] = $file;
    13. }
    14. }
    15. }
    16. closedir($handle);
    17. //Erst die Ordner ausgeben
    18. if(isset($folderArray)) {
    19. asort($folderArray);
    20. foreach($folderArray as $row) {
    21. $folderCount++;
    22. $content .= '<a href="#" onclick="toggleDisplay(this, \''.$folderCount.'\')"><b>+ '.$row.'</b></a><br />'."\n";
    23. $content .= '<div id="div'.$folderCount.'" style="padding-left:10px;color:#afafaf; display:none;" />'."\n"; //Unterordner nach Rechts einrücken
    24. $content .= ordnerinhalt($ordner.'/'.$row, $folderCount); //rekursive Funktion
    25. $content .= '</div>';
    26. }
    27. }
    28. //Dann die Dateien ausgeben
    29. if(isset($fileArray)) {
    30. asort($fileArray);
    31. foreach($fileArray as $row) {
    32. $content .= '<a href="'.$ordner.'/'.$row.'">'.$row.'</a><br />'; //Dateien verlinken
    33. }
    34. }
    35. return $content;
    36. }
    37. $folderCount = 0;
    38. echo ordnerinhalt('.', $folderCount);
    Alles anzeigen
  • Bei sowas hilft nur noch auf dach rennen und springen... man man man die lösung war so logisch danke es funzt jetzt
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.