Yahoo UI: Ordner auslesen

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

  • Yahoo UI: Ordner auslesen

    Hi Leute,

    ich hab auf der easy coding Site das PHP Script zum auslesen von Ordner gefunden. Ist ja genial.

    Nun will ich realisieren, dass das Ergebnis in einer ausklappbaren Baumstruktur (guggst du)angelegt wird. Das dazugehörtige script sieht so aus:

    Quellcode

    1. <script type="text/javascript">
    2. var tree;
    3. var nodes = new Array();
    4. var nodeIndex;
    5. function treeInit() {
    6. buildRandomTextNodeTree();
    7. }
    8. function buildRandomTextNodeTree() {
    9. tree = new YAHOO.widget.TreeView("treeDiv1");
    10. tree.setExpandAnim(YAHOO.widget.TVAnim.FADE_IN);
    11. tree.setCollapseAnim(YAHOO.widget.TVAnim.FADE_OUT);
    12. for (var i = 0; i < Math.floor((Math.random()*4) + 3); i++) {
    13. var tmpNode = new YAHOO.widget.TextNode("label-" + var file, tree.getRoot(), false);
    14. buildRandomTextBranch(tmpNode);
    15. }
    16. tree.draw();
    17. }
    18. var callback = null;
    19. function buildRandomTextBranch(node) {
    20. if (node.depth < 6) {
    21. YAHOO.log("buildRandomTextBranch: " + node.index);
    22. for ( var i = 0; i < Math.floor(Math.random() * 6) ; i++ ) {
    23. var tmpNode = new YAHOO.widget.TextNode(node.label + "*" + i, node, false);
    24. buildRandomTextBranch(tmpNode);
    25. }
    26. }
    27. }
    28. </script>
    Alles anzeigen


    folgendes funktioniert leider nicht:

    Quellcode

    1. var tmpNode = new YAHOO.widget.TextNode(node.label + "*" +<?=$var?>, node, false);


    oder

    Quellcode

    1. var tmpNode = new YAHOO.widget.TextNode(node.label + <?php echo '$folderArray' ?>, node, false, node, false);


    Jmd ne Idee?
  • das zweite kann nicht funktionieren, da variablen zwischen einfachen anführungszeichen nicht interpretiert werden

    hab dir hier mal was runtergetippt
    ist ungetestet - außerdem ist die ajax funktion nicht implementiert, stattdessen wird standardinhalt für die unterordner geladen - bin sicher, du kennst die Yahoo API besser als ich und kannst das schneller umsetzen

    Quellcode

    1. function buildRandomTextNodeTree() {
    2. tree = new YAHOO.widget.TreeView("treeDiv1");
    3. tree.setExpandAnim(YAHOO.widget.TVAnim.FADE_IN);
    4. tree.setCollapseAnim(YAHOO.widget.TVAnim.FADE_OUT);
    5. var arr = new Array(<?php
    6. $handle = opendir('.');
    7. while ($file = readdir ($handle)) {
    8. echo (++$i>1?',':'')."'$file'";
    9. }
    10. closedir($handle);
    11. ?>);
    12. for (var i = 0; i < arr.length; i++) {
    13. var tmpNode = new YAHOO.widget.TextNode(arr[i], tree.getRoot(), false);
    14. buildRandomTextBranch(tmpNode);
    15. }
    16. tree.draw();
    17. }
    18. function buildRandomTextBranch(node) {
    19. if (node.depth < 6) {
    20. YAHOO.log("buildRandomTextBranch: " + node.index);
    21. //lade ordnerinhalt aus ajax datei
    22. //Beispielinhalt START
    23. var response = "unterordner1;unterordner2;unterordner3";
    24. //Beispielinhalt END
    25. var arr = new Array();
    26. arr = response.split(';');
    27. for (var i = 0; i < arr.length; i++) {
    28. var tmpNode = new YAHOO.widget.TextNode(arr[i], node, false);
    29. buildRandomTextBranch(tmpNode);
    30. }
    31. }
    32. }
    Alles anzeigen
  • also wenn ich den Code verwende, bring ich den Prozessor zum glühen (100% Auslastung IExplorer)

    Der ganze (ursprüngliche) Code sieht so aus: (aus Gründen der Übersicht aheb ich style Anweisungen entfernt)

    Quellcode

    1. <html>
    2. <body onLoad="treeInit()">
    3. <link rel="stylesheet" type="text/css" href="css/local/tree.css">
    4. <script type="text/javascript" src="../../build/yahoo/yahoo.js" ></script>
    5. <!-- The following are required for the logger -->
    6. <script type="text/javascript" src="../../build/event/event.js"></script>
    7. <script type="text/javascript" src="../../build/dom/dom.js"></script>
    8. <script type="text/javascript" src="../../build/logger/logger.js"></script>
    9. <!-- End logger reqs -->
    10. <script type="text/javascript" src="../../build/treeview/treeview-debug.js" ></script>
    11. <script type="text/javascript" src="../../build/animation/animation.js"></script>
    12. <?
    13. function ordnerinhalt($ordner='img')
    14. {
    15. $handle = opendir($ordner);
    16. while ($file = readdir ($handle)) {
    17. if($file{0} != '.') { //Versteckte Dateien nicht anzeigen
    18. if(is_dir($ordner.'/'.$file)) {
    19. $folderArray[] = $file;
    20. } else {
    21. $fileArray[] = $file;
    22. }
    23. }
    24. }
    25. closedir($handle);
    26. //Erst die Ordner ausgeben
    27. if(isset($folderArray)) {
    28. asort($folderArray);
    29. foreach($folderArray as $row) {
    30. echo '<div class="main" /><b>'.$row.'</b></div><br />';
    31. //echo '<div class="tabelle" />'; //Unterordner nach Rechts einrücken
    32. //ordnerinhalt($ordner.'/'.$row); //rekursive Funktion
    33. //echo '</div>';
    34. }
    35. }
    36. //Dann die Dateien ausgeben
    37. if(isset($fileArray)) {
    38. asort($fileArray);
    39. foreach($fileArray as $row) {
    40. // echo '<div class="link" /><a href="'.$ordner.'/'.$row.'">'.$row.'</a></div><br />'; //Dateien verlinken
    41. }
    42. }
    43. }
    44. ordnerinhalt();
    45. ?> <div id="content">
    46. <form name="mainForm" action="javscript:;">
    47. <div id="expandcontractdiv">
    48. <a href="javascript:tree.expandAll()">Expand all</a>
    49. <a href="javascript:tree.collapseAll()">Collapse all</a>
    50. </div>
    51. </form>
    52. </div>
    53. <script type="text/javascript">
    54. var tree;
    55. var nodes = new Array();
    56. var nodeIndex;
    57. var file = "<?php echo '$folderArray' ?>";
    58. function treeInit() {
    59. buildRandomTextNodeTree();
    60. }
    61. function buildRandomTextNodeTree() {
    62. tree = new YAHOO.widget.TreeView("treeDiv1");
    63. tree.setExpandAnim(YAHOO.widget.TVAnim.FADE_IN);
    64. tree.setCollapseAnim(YAHOO.widget.TVAnim.FADE_OUT);
    65. for (var i = 0; i < Math.floor((Math.random()*4) + 3); i++) {
    66. var tmpNode = new YAHOO.widget.TextNode("label-" + <?php echo '$folderArray' ?>, tree.getRoot(), false);
    67. buildRandomTextBranch(tmpNode);
    68. }
    69. tree.draw();
    70. }
    71. var callback = null;
    72. function buildRandomTextBranch(node) {
    73. if (node.depth < 6) {
    74. YAHOO.log("buildRandomTextBranch: " + node.index);
    75. for ( var i = 0; i < Math.floor(Math.random() * 6) ; i++ ) {
    76. var tmpNode = new YAHOO.widget.TextNode(node.label + <?php echo '$folderArray' ?>, node, false, node, false);
    77. buildRandomTextBranch(tmpNode);
    78. }
    79. }
    80. }
    81. </script>
    82. </body>
    83. </html>
    Alles anzeigen


    Ich muss dazu sagen, ich bin auf beiden gebieten der tiefgehende Spezialist... :oops:
  • prozessorauslastung 90% ?
    hast du auch ne .php datei erstellt? ansonsten wird die php while-schleife vllt falsch interpretiert und von javascrit verarbeitet..

    arbeite mal mit meinem code weiter, der ist schon ziemlich nah dran.
    fehlen nur ein paar yahoo api spezifische funktionen

    hier noch eine kleine optimierung:

    Quellcode

    1. <?php
    2. $handle = opendir('.');
    3. while ($file = readdir ($handle)) {
    4. if(++$i > 2)
    5. echo ($i>3?',':'')."'$file'";
    6. }
    7. closedir($handle);
    8. ?>
  • Zumindest die Auslastung tut jetzt. Das Ergebnis im Browser sieht so aus:

    'menu','default','check','bullet.gif','qbottom.png','folders','greybg.png','qmiddle.png','qtop.png','logo.gif','navHover2.png','header.gif' Expand all Collapse all
    hintereinander, nichtmehr untereinander

    Ich habe jetzt noch folgende Änderungen gemacht:

    Quellcode

    1. <body onLoad="treeInit()">

    habe ich vor Beginn des PHP, nach Ende der Scriptaufzählung gebracht

    zusätzlich habe ich noch:

    Quellcode

    1. function buildRandomTextNodeTree() {
    2. var tree = new YAHOO.widget.TreeView("treeDiv1");
    3. tree.setExpandAnim(YAHOO.widget.TVAnim.FADE_IN);
    4. tree.setCollapseAnim(YAHOO.widget.TVAnim.FADE_OUT);
    5. var arr = new Array(<?php
    6. $handle = opendir('img');
    7. while ($file = readdir ($handle)) {
    8. echo (++$i>1?',':'')."'$file'";
    9. }
    10. closedir($handle);
    11. ?>);
    12. for (var i = 0; i < arr.length; i++) {
    13. var tmpNode = new YAHOO.widget.TextNode(arr[i], tree.getRoot(), false);
    14. buildRandomTextBranch(tmpNode);
    15. }
    16. tree.draw();
    17. }
    18. function buildRandomTextBranch(node) {
    19. if (node.depth < 6) {
    20. YAHOO.log("buildRandomTextBranch: " + node.index);
    21. //lade ordnerinhalt aus ajax datei
    22. //Beispielinhalt START
    23. var response = $arr;
    24. //Beispielinhalt END
    25. var arr = new Array(<?php
    26. $handle = opendir('img');
    27. while ($file = readdir ($handle)) {
    28. echo (++$i>1?',':'')."'$file'";
    29. }
    30. closedir($handle);
    31. ?>);
    32. for (var i = 0; i < arr.length; i++) {
    33. var tmpNode = new YAHOO.widget.TextNode(arr[i], node, false);
    34. buildRandomTextBranch(tmpNode);
    35. }
    36. }
    37. }
    Alles anzeigen
    an der 2. Funktion geändert
  • du vermischst hier 2 programmiersprachen..
    vergess deinen ansatz mal und nimm nochmal meinen code

    hab mir grad extra die mühe gemacht und die Yahoo UI Library runtergeladen
    den code, den ich erstellt habe habe ich 1:1 kopiert und ich kriege den ordnerinhalt des hauptordners problemlos angezeigt
    als unterordner wird natürlich nur der beispielinhalt geladen

    aber das kannst du auch mit einer eigenen ajax funktion nachrüsten
    z.B. nach diesem Wiki Eintrag
    [coderwiki]HowTos/Ajax-Bild-bei-Aenderung-nachladen[/coderwiki]

    in etwa könnte die fertige funktion dann so aussehen:

    Quellcode

    1. function buildRandomTextBranch(node) {
    2. if (node.depth < 6) {
    3. YAHOO.log("buildRandomTextBranch: " + node.index);
    4. //lade ordnerinhalt aus ajax datei
    5. //Beispielinhalt START
    6. try {
    7. req = window.XMLHttpRequest?new XMLHttpRequest():
    8. new ActiveXObject("Microsoft.XMLHTTP");
    9. } catch (e) {
    10. //Kein AJAX Support
    11. }
    12. req.onreadystatechange = function() {
    13. if ((req.readyState == 4) && (req.status == 200)) {
    14. var response = req.responseText;
    15. var arr = new Array();
    16. arr = response.split(';');
    17. for (var i = 0; i < arr.length; i++) {
    18. var tmpNode = new YAHOO.widget.TextNode(arr[i], node, false);
    19. buildRandomTextBranch(tmpNode);
    20. }
    21. }
    22. }
    23. req.open("GET", 'folder.php?s='+ node.label);
    24. req.send(null);
    25. }
    26. }
    Alles anzeigen
  • update...

    die vorherige lösung hat die yahoo UI funktionen natürlich nicht genutzt
    fürs wiki habe ich nun einen code erstellt, der alle Yahoo UI Funktionen nutzt und die Ordnerstruktur darstellt

    Dynamisches Ordner auslesen mit AJAX und der Yahoo UI

    :arrow: [coderwiki]HowTos/Ajax-YUI-Ordner-auslesen[/coderwiki]
    den derzeitigen Code findet ihr außerdem hier im Anhang

    Falls ihr Fragen dazu habt, erstellt bitte einen neuen Thread
    Dateien
    • treeview.zip

      (62,13 kB, 342 mal heruntergeladen, zuletzt: )