![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 13 Dołączył: 7.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystki,
zacząłem pisać klasę do generowania tagów/kodu HTML. Nakreślę najpierw jak działa, a potem napiszę w czym problem. Jednym z ważniejszych klasy jest właściwość "neighborTags", jest to tablica zawierająca z kolei 4 inne tablice: before, after, outer, inner. Tak to działa:
Teraz mój problem. Napisałem metodę, która generuje kod html na zasadzie łączenia stringów. Generowałem pierwszy tag i sprawdzałem co ma w 'before' i w 'after' doklejałem co trzeba i dalej... Niestety bardziej skomplikowany kod jest źle generowany... Nie mam innego pomysłu jak to rozwiązać... Nie jestem nawet pewien czy jest to możliwe w przypadku takiej struktury danych. Ktoś ma jakiś pomysł? |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Ok zacznijmy od tego Po co ci coś takiego robić. Takie rozwiązanie o którym mówisz jest najgorszym z możliwych rozwiązań w Zend_Form_Decorators. Już niedługo dojdzie do tego, że każda literka będzie obiektem.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 13 Dołączył: 7.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ok zacznijmy od tego Po co ci coś takiego robić. Takie rozwiązanie o którym mówisz jest najgorszym z możliwych rozwiązań w Zend_Form_Decorators. Już niedługo dojdzie do tego, że każda literka będzie obiektem. czy to ma znaczenie po co? chodzi o rozwiązanie tego problemu... Generalnie klasa będzie miała 'cikawsze' zadania niż tylko generowanie htmla ale najpierw muszę rozwiązać ten problem. |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
No to przy generowaniu jednego taga sprawdza, jakie tagi ma w before. Generujesz je i wstawiasz przed tag. Podobine z after. Ale skoro mówisz, że źle ci działa to może byś sypnął kodem?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 13 Dołączył: 7.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
No to przy generowaniu jednego taga sprawdza, jakie tagi ma w before. Generujesz je i wstawiasz przed tag. Podobine z after. Ale skoro mówisz, że źle ci działa to może byś sypnął kodem? Problem tkwi w metodzie renderAll()
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 11 Dołączył: 2.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
linia 108:
co to jest $v2 - obiekt ? , do $this też jakoś niepodobne (IMG:style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 13 Dołączył: 7.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
linia 108: $html = $v2->renderAll($html, $k); co to jest $v2 - obiekt ? , do $this też jakoś niepodobne (IMG:style_emoticons/default/winksmiley.jpg) zgadza się obiekt, mało trafna nazwa co? v od value (element tablicy), 2 to zagnieżdżenie pętli foreach. generalnie cała ta metoda jest skopana, przepisywałem ją po kilka razy i dlatego takie nazewnictwo... Ten post edytował windman 11.09.2009, 19:10:13 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 11 Dołączył: 2.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
zgadza się obiekt, mało trafna nazwa co? v od value (element tablicy), 2 to zagnieżdżenie pętli foreach. generalnie cała ta metoda jest skopana, przepisywałem ją po kilka razy i dlatego takie nazewnictwo... czyli neberTags to jest tablica obiektów ? jesteś pewien, że odczytujesz je w tej samej kolejności co je zapisałeś ? zawsze wpisujesz coś do wszystkich 4 metod - 'before' 'after' 'inner' 'outer' nie sypie się wszystko gdy masz puste np. inner czyli np. 1. zapisujesz do wszystkich czterech 2. zapisujesz do trzech (bez inner ? outer ?) 3. znowu do czterech |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 13 Dołączył: 7.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
czyli neberTags to jest tablica obiektów ? jesteś pewien, że odczytujesz je w tej samej kolejności co je zapisałeś ? zawsze wpisujesz coś do wszystkich 4 metod - 'before' 'after' 'inner' 'outer' nie sypie się wszystko gdy masz puste np. inner czyli np. 1. zapisujesz do wszystkich czterech 2. zapisujesz do trzech (bez inner ? outer ?) 3. znowu do czterech nie bardzo wiem o co pytasz więc wytłumaczę jak to leci:
Wydaje mi się, że tablica $neberTags jest prawidłowo uzupełniana. Problemem jest metoda renderAll(). Nie jestem pewien, czy rekurencja jest poprawna i czy zwracane są odpowiednie wartości. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 11 Dołączył: 2.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
uruchomienie:
efekt:
musisz dojść do tego skąd tyle tego się nabrało, jak będzie wyglądało tak jak poniżej wtedy powinno działać
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
mi to wygląda (przyznaję się, że szczegółowo nie analizowałem skryptu) jak jednopoziomowa tablica asocjacyjna dla tagów (niższe poziomy są tylko dla atrybutów) gdzie jeszcze są zapisane niby zależności - ale zależności zagnieżdżeń tagów powinno też się realizować odpowiednio przez zagnieżdżenie tablicy kolejnej asocjacyjnej...
poza tym nie bardzo wiem do czego ten skrypt ma być tym bardziej, że w samym PHP jest też mechanizm DOM - skoro nie znam końcowego przeznaczenia więc nie mogę też krytykować - ale może jednak dało by się jakoś wykorzystać tutaj logikę DOM'u?? - spróbuj to zaimplementować: Document Object Model |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 13 Dołączył: 7.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
zależności zagnieżdżeń tagów powinno też się realizować odpowiednio przez zagnieżdżenie tablicy kolejnej asocjacyjnej... No ale dokładnie tak jest... atrybuty nie mają z tym nic wspólnego. Każdy obiekt posiada oddzielną tablicę to przechowywania atrybutów ($tagAttributes). Zagnieżdżone tagi to tablica $neberTags - tak naprawdę jest to tablica zawierająca kolejne Obiekty tagów - odpowiednio zagnieżdżone właśnie. Ten post edytował windman 11.09.2009, 21:42:43 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 101 Pomógł: 11 Dołączył: 2.02.2005 Ostrzeżenie: (0%) ![]() ![]() |
tak w największym skrócie wyobrażam sobie prowadzenie wykopalisk :
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
IMO jeżeli musisz to robić od podstaw samemu to jednak radziłbym wzorować się na DOMie.
A struktura klas mniej-więcej:
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 13 Dołączył: 7.01.2008 Ostrzeżenie: (0%) ![]() ![]() |
IMO jeżeli musisz to robić od podstaw samemu to jednak radziłbym wzorować się na DOMie. Dzięki wszystkim za pomoc, znalazłem rozwiazanie:
Jezeli mam tag SPAN i przed niego chce wstawic tag IMG to: zanim do tablicy before tagu SPAN dodam nowy obiekt tagu IMG sprawdzam czy w tej tablicy juz sa jakies obiekty, jezeli tak to do odnalezionego obiektu dodaje ten nowy IMG lecz nie do tablicy before tylko after. Troche to zagmatwane, ale logiczne i tagi generowane sa w odpowiedniej kolejnosci. Pozdrawiam Ten post edytował windman 16.09.2009, 14:09:40 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 20:49 |