Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Tree (drzewko), [klasa] php5
nospor
post 4.10.2006, 08:27:10
Post #1





Grupa: Moderatorzy
Postów: 36 482
Pomógł: 6303
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
artur81
post 4.10.2006, 09:55:47
Post #2





Grupa: Zarejestrowani
Postów: 252
Pomógł: 2
Dołączył: 4.12.2004
Skąd: Skierniewice

Ostrzeżenie: (10%)
X----


Hm, coś jest chyba nie tak,
Kodu nie analizowałem tylko zacząłem sobie klikać dodając nowe gałęzie do tego drzewka dolnego, które korzysta z bazy. Trzy razy zdażyło mi się że przy wpisywaniu nazwy nowej gałęzi wstawiło dwa razy taką samą. Czyli jednemu rodzicowi przypisało dwa dziecka, po jednym kliknięciu.
Usuwam jedno, dostaję komunikat "testower błędy, proszę nie wpadać w panikę" , próbuję usuwać drugie, nie usuwa się i dostaję komunikat że "Brak takiego węzła".


--------------------
Go to the top of the page
+Quote Post
nospor
post 4.10.2006, 10:05:18
Post #3





Grupa: Moderatorzy
Postów: 36 482
Pomógł: 6303
Dołączył: 27.12.2004




hmm, nie udalo mi sie osiągnac takiego efektu podwojnego dodania co mowisz. jeszcze popatrze pod tym kątem. co do:
Cytat
testower błędy, proszę nie wpadać w panikę
To juz pisalem w pierwszym poscie, ze przy usuwaniu jesli wszystko jest ok, to generuje taki komunikat, by pokazac jak wygladaja bledy smile.gif To tylko dla picu jest


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

"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
artur81
post 4.10.2006, 10:09:10
Post #4





Grupa: Zarejestrowani
Postów: 252
Pomógł: 2
Dołączył: 4.12.2004
Skąd: Skierniewice

Ostrzeżenie: (10%)
X----


hm, myślałem że coś poprawiłeś, bo już nie dodaje podwójnie blink.gif
co do błędów to wiem, że są to testowe, chodziło mi tylko o to, że jak utworzyły się dwa węzły z jednego
to przy pierwszym kasowaniu pokazywał się komunikat o tych testowych błędach (kasowało jeden węzeł) a przy drugim że nie ma węzła mimo że w gałęzi był.
Aha, nie jestem pod wpływem żadnych środków odurzających i widzę normalnie. tongue.gif
W każdym razie problem jakby zniknął.

Ten post edytował artur81 4.10.2006, 10:09:40


--------------------
Go to the top of the page
+Quote Post
nospor
post 4.10.2006, 10:13:02
Post #5





Grupa: Moderatorzy
Postów: 36 482
Pomógł: 6303
Dołączył: 27.12.2004




udalo mi sie wychwycic problem. Wyglada jakby nie czekalo na to co mi zwroci jeden ajax, tylko leci juz do nastepnego. Dane dodają sie dobrze, ale wyswietlaja sie podwojnie. Popracuje nad tym bugiem.
A przy usuwaniu duplikatu walilo ci bledem, bo w bazie juz go nie bylo, bo usunales za pierwszym razem. A ze na liscie go jeszcze miales i probowales go usunac a juz go nie bylo to lecial blad.

edit: ja wiem ze ty wiesz o bledach. wyjasnialem tylko dla pewnosci winksmiley.jpg

Co do wystepowania bugu to juz wiem kiedy wystepuje. postaram sie to szybko poprawic.


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

"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
artur81
post 4.10.2006, 10:19:55
Post #6





Grupa: Zarejestrowani
Postów: 252
Pomógł: 2
Dołączył: 4.12.2004
Skąd: Skierniewice

Ostrzeżenie: (10%)
X----


IE 6.0, FF 1.5.0.7 i Opery 9.01. Błąd wyskoczył na Firefoksie.
Co do wyświetlania komunikatów o błędach to wiem że to o to chodziło, nie mam problemu ze zrozumieniem że jak czegoś nie ma w bazie to się tego nie da usunąć. tongue.gif
Pozdrawiam!

Na Operze też problem występuje.
Nie wiem czy to Ci się przyda, ale zauważyłem coś takiego że przy wstawianu gałęzi w pierwszej kolejności jest rysowany ten przycisk do zwijania i rozwijania a następnie wyświetlane są gałęzie. W przypadku gdy wyświetli się podówjny wpis, dane wyświetlają się jakby w innej kolejności. Tzn, najpierw pojawiają się dwie gałęzie a dopiero ten przycisk do zwiajania i rozwijania.

Edit: Ok, czekam z niecierpliwością, bo nieukrywam ale klasa by mi się przydała tongue.gif

Ten post edytował artur81 4.10.2006, 10:33:02


--------------------
Go to the top of the page
+Quote Post
hwao
post 4.10.2006, 14:41:25
Post #7


Developer


Grupa: Moderatorzy
Postów: 2 844
Pomógł: 20
Dołączył: 25.11.2003
Skąd: Olkusz




jak klikniesz 2 razy to robi 2 requesty, tym samym potem sa dodane/pobrane podwojnie dane
Go to the top of the page
+Quote Post
nospor
post 16.10.2006, 19:57:34
Post #8





Grupa: Moderatorzy
Postów: 36 482
Pomógł: 6303
Dołączył: 27.12.2004




@hwao ty to zgadujesz czy sprawdziles? Bo blad pojawia sie w innej sytuacji niz klikniecie dwukrotnie. Znaczy przy dwukrotnym (jak ci sie uda) to tez moze sie pojawic, ale to wina czego innego.
Bede mial chwilke to naniose poprawki. Wina jest w jednej funkcji js.

dane są dodawane dobrze - pojedynczo, a nie jak sugerujesz podwojnie. Tylko ze w pewnej sytuacji sie podwojnie wyswietlaja. ot co.

edit:
ok, bug poprawiony. Poprawki nanioslem tylko w pliku tree.js.
Poprawki umieszczone sa w starej paczce. Nie chcialem tworzyc nowego numerka tylko spowodu drobnych poprawek w js.

edit:
Poprawilem drobny błąd, ktory powodowal, iż mozna było wstrzyknąc kod html w nazwie węzła, nawet iż dalismy htmlspecialchars. Bylo to spowodowane zachowaniem xml'a, ktorego sie nie spodziewalem. No, ale czlowiek cale zycie sie uczy. winksmiley.jpg
Calosc w starej paczce. Jakos niechce mi sie teraz numerkow zmieniac.


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

"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
bigZbig
post 17.10.2006, 08:26:49
Post #9





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


@nospor - :O - co robią odwołania do tablicy REQUEST wewnątrz metod klasy Tree? Jak to się ma do ideii hermetyzacji? Klasy nie powinno obchodzić jakią metodą dane zostały dostarczone. Poza tym zapis
  1. <?php
  2. return isset($_REQUEST['tree_id']) ? $_REQUEST['tree_id'] : null;
  3. ?>

to masło maślane bo jest to równoznaczne z return $_REQUEST['tree_id'];

Tak samo z operacjami na zmiennych sesyjnych. Moim zdaniem powinno się to odbywać tak. W momencie utworzenia obiektu lub w wybranej chwili pobierasz jedną zmienną z sesji (zmienna ta to tablica zawierająca wszystkie właściwości obiektu przechowywane w sesji). Operujesz na tej zmiennej i jeśli dokonałeś jakichś zmian nadpisujesz tę zmienną w sesji. Powinieneś mieć możliwość nadania dowolnej nazwy tej zmiennej ponieważ stanowi ona jedynie rodzaj kontenera. Dzięki temu unikniesz konfiktów, które mogłyby wystąpić w przypadku gdyby dwie zupełnie różne klasy próbowały zapisywać coś w sesji w zmiennej o tej samej nazwie.

Klasa TreeImpl to moim zdaniem nieporozumienie bo w kodzie o charakterze uniwersalnym - typowym przykładzie DAO (Data Access Object) umieszczasz na sztywno skonkretyzowany tylko i wyłącznie dla danego przypadku kod:
  1. <?php
  2. $ar[$_key]['actions'] = array(
  3. 'onclick' => array('link'=>'http://www.interia.pl?$ID','disabled'=>$_key == 2),
  4. 'edit' => array('before' => true,'disabled'=>$_key == 2,'src'=>($_key == 2 ? './images/tree/emptyAction.gif' : false)),
  5. 'delete' => array('before' => true, 'disabled'=>($_key == 1 || $_key == 2 || $_key == 3 || $_key == 4)),
  6. 'checkbox' => array('before' => true, 'title' => 'Zaznacz mnie', 'checked'=>$_key == 2),
  7. );
  8. ?>

Przecież to powinno być ustawiane z "zewnątrz" i to w klasie Tree, a nie TreeImpl bo jest to funkcjonalność związana z widokiem a nie dostępem do danych (MVC).

I jeszcze uwaga dotycząca zastosowania. Piszesz, że nadaje się do dużych i małych drzew. Do małych ok, choć niekiedy bardziej się opłaca załadować całe drzewo i sterować nim jedynie za pomocą js (brak opóźnień, jedno zapytanie do DB lub odczyt pliku itp.). Do dużych bardziej, ale tylko o niewielkim stopniu zagłębień i dużej liczbie podelementów w danym elemencie. Mówiąć inaczej jeśli masz 20 leweli w głąb drzewa, a każdy z elementów zawiera zaledwie po kilka potomków to zabawa staje się średnio przyjemna i wydajna. Przydała by się w takim wypadku możliwość wczytywania całych gałęzi, ale to już zahacza o zbiory zagnieżdżone albo drzewa depesza.


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
nospor
post 17.10.2006, 08:50:42
Post #10





Grupa: Moderatorzy
Postów: 36 482
Pomógł: 6303
Dołączył: 27.12.2004




A więc pokolei.

Cytat
to masło maślane bo jest to równoznaczne z return $_REQUEST['tree_id'];

No nie. Nie jest rownowazne. W przypadku gdy nie ma tree_id, to poleci notice przy Twoim wywolaniu. A ja nie lubie noticow. Pozatym uzywam REQUEST, bo mnie wali czy to z GETA czy z POSTA bedzie.

Cytat
Dzięki temu unikniesz konfiktów, które mogłyby wystąpić w przypadku gdyby dwie zupełnie różne klasy próbowały zapisywać coś w sesji w zmiennej o tej samej nazwie.
Poto dla drzewka sie nadaje ID, by bylo unikalne. Jak ktos oto nie zadba to juz nie moja wina.

Cytat
Klasa TreeImpl to moim zdaniem nieporozumienie bo w kodzie o charakterze uniwersalnym - typowym przykładzie DAO (Data Access Object) umieszczasz na sztywno skonkretyzowany tylko i wyłącznie dla danego przypadku kod:
Przecież to powinno być ustawiane z "zewnątrz" i to w klasie Tree, a nie TreeImpl bo jest to funkcjonalność związana z widokiem a nie dostępem do danych (MVC).

Widzisz, nie zalapales idei. TreeImpl to jest juz klasa pisana przez usera. Co on tam napisze to mnie malo obchodzi. Klasa ta ma implementowac interfejs, a jak go zaimplementuje to jej sprawa.
Co do kodu o ktorym napisales. Kod ten przypisuje akcje dla danego wezla. Oczywiscie akcje te mozna zdefiniowac globalnie. Czyli mowisz ze dla calego drzewa mozliwa jest edycja i usuwanie. ALe np. dla wezla nr.1 nie chcesz pozwolic na usuwanie. To sie wlasnie okresla juz w implementacji interfejsu. Takze Twoje "oskarzenia" sa bez podstawne. Poprostu nie zrozumiales idei funkcjonowania i zarządzania drzewem.

Cytat
Przydała by się w takim wypadku możliwość wczytywania całych gałęzi,
I to tez jest mozliwe. uzytkownik moze zwrocic mi cale drzewo na raz. Skrypt js to zinterpetuje i utworzy drzewo prawidlowo. NIe ma wiec problemu.

Jeszcze jakies pytania i uwagi? smile.gif


edit:
Przyklad zwracania calego drzewa jest w przypadku drugiego drzewa w moim demie. Stan drzewa jest pamietany w sesji. I jesli rozwiniesz cale drzewo i przeladujesz strone, to otrzymasz cale rozwiniete drzewo.


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

"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
bigZbig
post 17.10.2006, 09:01:16
Post #11





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Ja rozumiem, że TreeImpl może pisać user, ale czy to nie może być zgodne ze wzorcem MVC? User moze sobie pisac jak chce i ja nie bede tego oceniał (chyba, że mnie o to poprosi), ale ty pisząc przykład powinieneś dać przykład i napisać dla pierwszego przypadku klasę TreeImpl (dającą dostęp do danych) oraz klasę dziedziczącą po Tree zmieniającą sposób generowania drzewa (dodającą lub usuwającą pewne opcje).

Poza tym skoro już napisałeś dwie klasy typu DAO to czy ich użycie jest zabronione przez użytkownika? Skoro już są i mają charakter uniwersalny to czemu ich nie użyć?

Co do REQUESTA to nie chodzi o to czy to zastępuje POST czy GET - tablica superglobalna nie powinna się w ogóle znaleść wewnątrz klasy. Bo czym się ona różni w tym kontekście od tablicy $_GLOBALS lub słowa global?


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
nospor
post 2.11.2006, 17:30:56
Post #12





Grupa: Moderatorzy
Postów: 36 482
Pomógł: 6303
Dołączył: 27.12.2004




Cytat
ale ty pisząc przykład powinieneś dać przykład i napisać dla pierwszego przypadku klasę TreeImpl (dającą dostęp do danych) oraz klasę dziedziczącą po Tree zmieniającą sposób generowania drzewa (dodającą lub usuwającą pewne opcje).

Na chwile obecna mozna zrobic to o czym mowisz. Mozna odziedziczyc po Tree, napisac wlasna metode GenerateXML() ktora bedzie modyfikowala akcje dla danego wezla. Albo mozna dopisac inna funkcje ktora zmodyfikuje te akcje a GenerateXML zostawic w spokoju. Nie ma problemu.
Czemu ja tego nie zrobilem w swoim przykladzie? No coz, osobiscie nie uwazam tego za dobry pomysl. Nie jestem zwolennikiem walenia wszedzie pewnych wzorcow. Dla mnie wygodniej bylo to umiescic w implementacji interfejsu i juz smile.gif Ale jak pisalem mozliwosci na Twoj sposob są i jak ktos chce to moze tak zrobic. Co komu wygodniej.

Cytat
Poza tym skoro już napisałeś dwie klasy typu DAO to czy ich użycie jest zabronione przez użytkownika? Skoro już są i mają charakter uniwersalny to czemu ich nie użyć?
A można. Ale przyklady te pisalem na szybko, by tylko pokazac jak dzialają. Przyklad pierwszy trzymajacy dane w serializowanej tablicy to robota w 5 minut. Czy warta polecenia dla czyjejs aplikacji? No raczej nie. No chyba zeby pare modyfikacji zrobic.
Przyklad drugi oparty jest na takiej strukturze tabeli, od ktorej juz sie raczej odchodzi. Rodzica okresla sie tylko przez parenta, bez zadnych sciezek. Oczywiscie mozna to lekko dopracowac i bedzie git. Niedlugo to drzewko zostanie zaprzęgniete do naszej aplikacji, gdzie struktura tabeli jest inna.
W przykladach chodzilo mi tylko by pokazac jak uzywac klasy i jak pisac wlasne sterowniki. Zazwyczaj kazdy jakies wlasne struktury juz ma.

Cytat
Co do REQUESTA to nie chodzi o to czy to zastępuje POST czy GET - tablica superglobalna nie powinna się w ogóle znaleść wewnątrz klasy. Bo czym się ona różni w tym kontekście od tablicy $_GLOBALS lub słowa global?

Hmmm, byc może masz racje. Chcialem jednak by uzytkownik nie zawracal sobie glowy takimi pierdulami.
Spodobal mi sie jednak Twoj pomysl odnosnie kontenera zamiast sesji. Daje to potencjalnie wieksze mozliwosci, jak np. zapamietywanie stanu drzewa nie tylko na okres sesji. Byc moze to zaimplementuje niedlugo. A jak to bede ruszal to moze i do tych REQUESTOW sie dobiore

ps: jak zwykle mnie "zjechales" winksmiley.jpg. Oby częściej smile.gif

edit:
Cytat
Ja rozumiem, że TreeImpl może pisać user,
Wybacz, nie mialem zlych zamiarow, ale po Twojej ostatniej "wpadce" przy Cache, wolalem sie upewnic winksmiley.jpg

edit2:
Tak jeszcze troche pomyslalem nad tym co napisales i faktycznie, w kontekscie tego, by napisane przeze mnie sterowniki byly mozliwe do wykorzystania bez zadnych zmian, to nalezaloby zarządzanie akcjami przeniesc do klasy dziedziczącej po Tree, a sterowniki by tylko zarządzaly danymi. Tu sie z Tobą zgadzam w 100%.
A mozna by sie posunac jeszcze o krok dalej i napisac oddzielny interfejs do zarządzania akcjami.

edit3
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.
nowe zmiany w paczce 1.1

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

edit5:
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.

edit6
Poprawilem drobne bledy, ktore powodowaly bledne dzialanie pod IE. Bledy wynikly podczas ostatniej zmiany, a zapomnialem przetescic pod IE i dopiero dzis przypadkiem na to luknalem.


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

"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
NuLL
post 19.11.2006, 18:11:07
Post #13





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Jaka to ma licencje ?


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
nospor
post 28.11.2006, 15:22:17
Post #14





Grupa: Moderatorzy
Postów: 36 482
Pomógł: 6303
Dołączył: 27.12.2004




Cytat
Jaka to ma licencje

Jak kazda moja klasa dostepna publicznie: LGPL
Informacja o tym jest w kazdej klasie

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
kacka
post 29.11.2006, 18:02:31
Post #15





Grupa: Zarejestrowani
Postów: 44
Pomógł: 5
Dołączył: 29.06.2005

Ostrzeżenie: (0%)
-----


@Nospor Twój przykład na stronie nie działa po podaniu w nim polskich literek.
Na localu rozwiązałem to zmieniając kodowanie na iso-8859-2.


--------------------
Kacper Szurek <--- http://www.kacka.pl
Go to the top of the page
+Quote Post
nospor
post 29.11.2006, 22:30:16
Post #16





Grupa: Moderatorzy
Postów: 36 482
Pomógł: 6303
Dołączył: 27.12.2004




a spojrz teraz smile.gif "strona główna" jak marzenie. Jak na moj gust masz cos nie tak z klawiaturą. Polskie znaczki uzywam caly czas i nie ma z tym problemu


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

"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
Aztech
post 4.01.2007, 09:45:06
Post #17





Grupa: Zarejestrowani
Postów: 276
Pomógł: 3
Dołączył: 22.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


@Nospor: jesteś wielki, właśnie zaoszczędziłeś mi mnóstwo, ale to mnóstwo pracy
Go to the top of the page
+Quote Post
misiek172
post 25.01.2007, 12:25:00
Post #18





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


ale zonk... ratujesz mi tym życie, bo pisze program do magazynowania, ale mam problem bo nie moge tego uruchomić ;P

mój conf: PHP4, MySQL 4

wywołałem w bazie to co było w pliku tree.sql, i nie moge uruchomić tego tree.php, wyskakuje mi błąd

Parse error: parse error, unexpected T_STRING, expecting '{' in C:\www\magazyn 2.0\tree\Tree.php on line 8

w tej linice jest:

class TreeImpl implements iTree{


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
nospor
post 25.01.2007, 12:26:31
Post #19





Grupa: Moderatorzy
Postów: 36 482
Pomógł: 6303
Dołączył: 27.12.2004




Cytat
mój conf: PHP4, MySQL 4

Ta klasa jest pisana pod php5


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

"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
misiek172
post 25.01.2007, 12:28:54
Post #20





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

Ostrzeżenie: (0%)
-----


tak coś czułem ;P, ściągłem PHP5 teraz próbuje zaintalować ;P, podmienił mi conf i wszystko jeb... zepsuło się ;P ale sobie poradze biggrin.gif

edit: nie no jednak nie moge sobie poradzić... możecie mi jakiś link do arta zapodać jak do apache z php4 dodać php5 ...

Ten post edytował misiek172 25.01.2007, 13:06:03


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 15.06.2024 - 16:01