Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Tree (drzewko), [klasa] php5
nospor
post 4.10.2006, 08:27:10
Post #1





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




info + demo
pobierz


To znowu ja smile.gif

Przedstawiam Wam moją nową klasę Tree. Służy ona do zarządzania strukturą drzewiastą.

Krótka charakterystyka:

Z założenie klasa miała operować na dowolnych danych: baza, pliki xml, system plików, itd. By to osiągnąć wprowadziłem interfejs, który każdy kto chce używać klasy musi zaimplementować. Klasa wówczas nie interesuje się skąd pochodzą dane. Ją interesuje tylko by dostać to co chce. W umieszczonym przykładzie załączyłem implementacje operujące na bazie oraz na zserializowanej tablicy zapisanej w pliku.

Całość oparta jest na ajaxie. Znaczy to, iż klasa nie generuje kodu html drzewka. Zadaniem klasy jest zwracanie xml'a, który reprezentuje potrzebne dane. Drzewo budowane jest po stronie klienta po odebraniu niezbędnych danych. Drzewo nie jest budowane w całości, ale dobudowywane jest na żądanie, czyli np: rozwijamy gałaź X, wówczas leci żądanie do serwera (przy pomocy ajaxa oczywiście), które prosi o dzieci dla gałęzi X. Gdy te dzieci dostaniemy to są dobudowywane.

Drzewo dostarcza standardowe akcje: usuwanie, edycja, dodawanie, checkbox, akcja po kliknięciu na gałąź.
Każdy może sobie sam zdefiniować, jakich akcji chce używać. Można definiować akcje globalnie dla całego drzewa, ale można też dla każdej gałęzi definiować oddzielne akcje. Czyli np: mowimy, że dla całego drzewa będzie akcja usuwania, ale dla gałęzi X nie pozwalamy na tę akcję.
Akcja checkboc może być przydatna np. do określania praw dla danych gałęzi.
Miejsce występowania akcji, tzn. czy mają być przed nazwą węzła, czy też po, można samemu określać.

Wywołanie akcji polega na:
- wysłaniu żądania na serwer z daną akcją
- serwer robi co ma robić i zwraca informacje czy sie powiodło
- jesli akcja na serwerze się powiodła, dopiero wówczas następuje wizualizacja u klienta.

Jest możliwość zapamiętywania stanu drzewa w sesji, dzięki czemu bo odswierzeniu strony, otrzymamy drzewo rozwinięte tak jak było przed odswierzeniem.

Serwer może zwracać komunikaty tekstowe lub też błędy. Obie te rzeczy zostaną wyświetlone dla klienta. W przykładzie co pokazalem, podczas usuwania gałęzi z drugiego drzewa, generowany jest testowy błąd, by pokazac jak to wygląda.
Skrypt do zarządania komunikatami ogranicza się do wywolania funkcji napisanej przez uzytkownika. Nie chcialem tutaj nikomu wchodzic w jego wlasne sposoby wyswietlania. Oczywiscie dołączony jest moj przykladowy sposob zarządzania komunikatami.

No to chyba wszystko. Zapraszam do testowania, używania i zgłaszania uwag.

edit:
Zapomnialem o najwazniejszym - zastosowanie:
Klasa przyda sie do wyswietlania drzewek i duzych i malych, ale jej plusy najbardziej widać będzie na duzych drzewach, gdzie nie trzeba będzie generować od razu calej struktury, a tylko to co jest w danej chwili potrzebne.

edit2
No to dowalilem dodatkowy interfejs do zarządzania prawami oraz akcjami. Teraz jak ktoś chce może definiować prawa i akcje wewnątrz pierwszego interfejsu, ale może również robić to w interfejsie specjalnie do tego stworzonym. Zaletą tego drugiego jest to, iż możemy raz napisac sterownik do zarządzania danymi w drzewie i wykorzystywać go bez zmian w roznych projektach. A jesli projekty będą roznily sie prawami, to bedzie mozna je bez problemu ustawic w drugim sterowniku.
W zalączonym przykladzie, pierwsze drzewo dziala po staremu, drugie natomiast wykorzystuje już interfejs praw i akcji.
Dorobilem również tryb debugMode, ktory umożliwia podejrzenie zwroconych danych przez serwer w przypadku, gdy xml bedzie bledny.
Pojawila się rownież ikona czekania.

edit3:
Mozliwosc definiowania ikon folderow dla wybranych węzłów oraz klasy css. Akurat mi bylo to potrzebne to dorobilem smile.gif

edit4:
Z racji, ze w firmie uzywamy prototype do ajaxa, ustawilem przelacznik w drzewku, ktory mowi czy korzystac z advAjax czy prototype. Zmienie niewielkiej ulegl wiec Tree.js.
Na poczatku pliku jest zmienna ajaxLib, która trzeba odpowiednio ustawic by korzystac z danego liba.
Do drzewka dolaczony jest tylko advAjax 1.1. Pozatym na advAjax 2.0RC1 byly pewne problemy z rozpoznawaniem xml na FF.

edit:
Doszla mozliwość dodawania do każdego węzła dodatkowych parametrów, które będzie można odczytać później na stronie i wykorzystać do "niecnych" celów. U mnie w firmie drzewko jest dosc mocno eksploatowane i okazalo się, iż potrzeba takiego "bajeru" - to sie dorobilo winksmiley.jpg
Nowe zmiany w paczce 1.2


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Posty w temacie
- nospor   Tree (drzewko)   4.10.2006, 08:27:10
- - artur81   Hm, coś jest chyba nie tak, Kodu nie analizowałem ...   4.10.2006, 09:55:47
- - nospor   hmm, nie udalo mi sie osiągnac takiego efektu podw...   4.10.2006, 10:05:18
- - artur81   hm, myślałem że coś poprawiłeś, bo już nie dodaje ...   4.10.2006, 10:09:10
- - nospor   udalo mi sie wychwycic problem. Wyglada jakby nie ...   4.10.2006, 10:13:02
- - artur81   IE 6.0, FF 1.5.0.7 i Opery 9.01. Błąd wyskoczył na...   4.10.2006, 10:19:55
- - hwao   jak klikniesz 2 razy to robi 2 requesty, tym samym...   4.10.2006, 14:41:25
- - nospor   @hwao ty to zgadujesz czy sprawdziles? Bo blad poj...   16.10.2006, 19:57:34
- - bigZbig   @nospor - :O - co robią odwołania do tablicy REQUE...   17.10.2006, 08:26:49
- - nospor   A więc pokolei. Cytatto masło maśl...   17.10.2006, 08:50:42
- - bigZbig   Ja rozumiem, że TreeImpl może pisać user, ale czy ...   17.10.2006, 09:01:16
- - nospor   Cytatale ty pisząc przykład powiniene...   2.11.2006, 17:30:56
- - NuLL   Jaka to ma licencje ?   19.11.2006, 18:11:07
- - nospor   CytatJaka to ma licencje Jak kazda moja klasa dost...   28.11.2006, 15:22:17
- - kacka   @Nospor Twój przykład na stronie nie działa po pod...   29.11.2006, 18:02:31
- - nospor   a spojrz teraz "strona główna" jak marz...   29.11.2006, 22:30:16
- - Aztech   @Nospor: jesteś wielki, właśnie zaoszczędziłeś mi ...   4.01.2007, 09:45:06
- - misiek172   ale zonk... ratujesz mi tym życie, bo pisze progra...   25.01.2007, 12:25:00
- - nospor   Cytatmój conf: PHP4, MySQL 4 Ta klasa jest pisana ...   25.01.2007, 12:26:31
- - misiek172   tak coś czułem ;P, ściąg...   25.01.2007, 12:28:54
- - nospor   Cytatedit: nie no jednak nie moge sobie poradzić.....   25.01.2007, 13:13:10
- - misiek172   od czego zależy kolejność w drzewku?   26.01.2007, 11:11:48
- - nospor   Cytatod czego zależy kolejność w drzewku? Kolejnos...   26.01.2007, 11:21:52
- - misiek172   no właśnie w cały świat segreguje bo dodałem i od...   26.01.2007, 11:26:45
- - nospor   Cytatzapytanie sql jest w pliku treeclass?Tree.cla...   26.01.2007, 11:30:44
- - misiek172   ów drzewko nie rozpoznaje, czy dana pozycja to fol...   29.01.2007, 10:57:35
- - nospor   Cytatnp te co nie maja dzieci nie powinny byc fold...   29.01.2007, 11:47:52
- - misiek172   Kombinuje i kombinuje i jeszcze raz kombinuje i ni...   4.04.2007, 19:00:29
- - nospor   Cytatiż po kliknięciu kolorW co kliknięcie? W plus...   4.04.2007, 19:49:09
- - pc5   Witam, Szukałem czegoś takiego i znalaz...   5.04.2007, 23:04:08
- - Zeman   Cytat(nospor @ 4.10.2006, 09:27:10 ) ...   6.04.2007, 00:20:49
- - nospor   CytatSytuacja: kliknąłem w [+], wgrały się AJAXem ...   6.04.2007, 07:55:29


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 16:18