Mam takie proste drzewko folderów w bazie danych:
id_folder| name |parent_folder_id|level ---------+--------+----------------+----- 1 | root |0 |1 ---------+--------+----------------+----- 2 |podroot1|1 |2 ---------+--------+----------------+----- 3 |podroot2|1 |2 ---------+--------+----------------+----- 4 | pod1 |2 |3 ---------+--------+----------------+-----
w html wygląda to mniej więcej tak, zakładając że wszystkie podfoldery są rozwinięte
w przypadku gdy foldery są zwinięte to wiadomo, wygląda to tak (tu również z kodem JavaScript):
<script type="text/javascript"> function expandFolder(folder_id){ advAJAX.get({ url: 'get_folder_content.php?folder_id='+folder_id, onLoading: function(obj){ $('expandArea'+folder_id).innerHTML = 'loading...'; }, onSuccess: function(obj){ $('expandArea'+folder_id).innerHTML = obj.responseText; } }); } </script> <table > <tr> <td> <div id="expandArea1"> </div> </td> </tr> </table>
plik pehapa to taki, który pobiera z bazy i formatuje zawartość katalogu
<?php $obj_folder = get_folder_content($_GET['folder_id']); echo ' <table >'; foreach ( $obj_folder->arr_subfolder_ids as $subfolder_id ){ echo '<tr> <td> <a href="java script:expandFolder('.$subfolder_id.')">'.$obj_folder->name.'</a><br> <div id="expandArea'.$subfolder_id.'"> </div> </td> </tr>'; } echo '</table> '; ?>
.. 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)