Witam!

Mam takie proste drzewko folderów w bazie danych:

  1. id_folder| name |parent_folder_id|level
  2. ---------+--------+----------------+-----
  3. 1 | root |0 |1
  4. ---------+--------+----------------+-----
  5. 2 |podroot1|1 |2
  6. ---------+--------+----------------+-----
  7. 3 |podroot2|1 |2
  8. ---------+--------+----------------+-----
  9. 4 | pod1 |2 |3
  10. ---------+--------+----------------+-----


w html wygląda to mniej więcej tak, zakładając że wszystkie podfoldery są rozwinięte
  1. <tr>
  2. <td>
  3. <a href="java script:expandFolder(1)">root</a><br>
  4. <div id="expandArea1">
  5. <table >
  6. <tr>
  7. <td>
  8. <a href="java script:expandFolder(2)">podroot1</a><br>
  9. <div id="expandArea2">
  10. <table >
  11. <tr>
  12. <td>
  13. <a href="java script:expandFolder(4)">pod1</a><br>
  14. <div id="expandArea4">
  15. </div>
  16. </td>
  17. </tr>
  18. </table>
  19. </div>
  20. </td>
  21. </tr>
  22. <tr>
  23. <td>
  24. <a href="java script:expandFolder(3)">podroot3</a><br>
  25. <div id="expandArea3">
  26. </div>
  27. </td>
  28. </tr>
  29. </table>
  30. </div>
  31. </td>
  32. </tr>


w przypadku gdy foldery są zwinięte to wiadomo, wygląda to tak (tu również z kodem JavaScript):
  1. <script type="text/javascript">
  2. function expandFolder(folder_id){
  3. advAJAX.get({
  4. url: 'get_folder_content.php?folder_id='+folder_id,
  5. onLoading: function(obj){
  6. $('expandArea'+folder_id).innerHTML = 'loading...';
  7. },
  8. onSuccess: function(obj){
  9. $('expandArea'+folder_id).innerHTML = obj.responseText;
  10. }
  11. });
  12. }
  13. <tr>
  14. <td>
  15. <a href="java script:expandFolder(1)">root</a><br>
  16. <div id="expandArea1">
  17. </div>
  18. </td>
  19. </tr>


plik pehapa to taki, który pobiera z bazy i formatuje zawartość katalogu

  1. <?php
  2. $obj_folder = get_folder_content($_GET['folder_id']);
  3. echo '
  4. <table >';
  5. foreach ( $obj_folder->arr_subfolder_ids as $subfolder_id ){
  6. echo '<tr>
  7. <td>
  8. <a href="java script:expandFolder('.$subfolder_id.')">'.$obj_folder->name.'</a><br>
  9. <div id="expandArea'.$subfolder_id.'">
  10. </div>
  11. </td>
  12. </tr>';
  13. }
  14. echo '</table>
  15. ';
  16. ?>


.. no dobra koniec wstępu, teraz o co chodzi.

Otóż nie mam pomysłu na taką sprawę, powiedzmy, że wchodząc na stronkę przekazuję przez $_GET parametr subfolder_id.
Problem jest taki, że na podstawie tego id, muszę rozwinąć drzewko katalogów do danego podkatalogu, które ma id równe $_GET['subfolder_id'].
Oczywiście, nie ma problemu gdy, bazując na powyższym przykładzie, chcemy wejść do katalogu o level=2, bo wtedy wystarczy po prostu sztucznie wywołać funkcję expandFolder().

Jak napisać funkcję w JavaScript (np, expandSubFolder(subfolder_id)) używającą advAJAX tak, aby tyle razy wywołała funkcję expandFolder() z odpowiednim parametrem, aż pojawi się podfolder o id=subfolder_id.

Czyli w powyższym przykładzie jak wywołać za pomocą jednego parametru podfolder "pod1" o id=4.

Jeśli zakręciłem sprawę to napiszcie czego nie rozumiecie.

PS. WAŻNE! Musi to być z użyciem expandFolder(), wiem, że niepotrzebnie robię kilkukrotny request, ale budowanie całego drzewa katalogów po stronie serwera i wysłanie do klienta nie wchodzi w grę. (nie będę tłumaczył dlaczego, bo zabraknie mi literek w poście ;P)