Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: klasa JS ułatwiająca klonowanie bloków HTML
Forum PHP.pl > Inne > Oceny
niebiarz
przez długi czas pracowałem przy bardzo obszernych i złożonych formularzach, których wygląd i treść musiały zmieniać się dynamicznie, cała masa zależności, wiele powielanych pól i bloków, na dodatek wersjonowanie formularzy ze względu na ich olbrzymie rozmiary (poprawne wypełnienie mogło zająć nawet kilka godzin - wnioski aplikacyjne i płatnicze z grubej rury). wymaganiem było poprawne działanie we wszystkich kluczowych przeglądarkach. w efekcie stworzyłem kilka użytecznych skryptów, m.in. klasę Cloner do kompleksowego klonowania bloków HTML. Wystarczy zdefiniować wzory, które mają być powielane w kodzie HTML a skrypt zajmuje się resztą - numeruje kolejne klony, pozwala na zagdnieżdżanie klonów w klonach, inkrementuje wartości atrybutów ID i NAME określone we wzorach (tak żeby tablica POST przesylana do serwera posiadała poprawną strukturę wielowymiarowej tablicy asocjacyjnej), automatycznie dodaje linki usuwania klonów wg wskazanych wzorów oraz obserwatory do linków klonowania i usuwania klonów. Programista ma pełną kontrolę nad procesem klonowania dzięki wykorzystaniu kilku callbacków pozwalających na parametryzowanie głównej funkcji klonującej oraz wykonywanie różnych działań przed i po klonowaniu czy usunięciu klonu. Praktycznie każdy parametr da się zmienić, żeby dostosować działanie do własnych potrzeb. Klasę udostępniłem na licencji LGPL, można więc zmieniać jej kod i używać w projektach komercyjnych bez wymogu udostępniania kodu.

Przykład działania: http://niebiarz.eu/free/cloner_1_0.php?nesting_targets_ex
Tutorial (niestety na razie tylko po angielsku): http://niebiarz.eu/free/cloner_1_0.php?basics_functions
Kod z różnymi komentarzami: http://niebiarz.eu/free/cloner_1_0_comments.js
Download: http://cloner.sourceforge.net/
phpion
Jak dla mnie spoko, przydatne. Brakuje mi jednak możliwości przesuwania boxów góra/dół. Wówczas byłoby to kompleksowe rozwiązanie do wielu zastosowań.
niebiarz
Cytat(phpion @ 21.05.2009, 09:47:30 ) *
Brakuje mi jednak możliwości przesuwania boxów góra/dół. Wówczas byłoby to kompleksowe rozwiązanie do wielu zastosowań.

Mozna by sie nad tym zastanowic, tylko czemu by to konkretnie mialo sluzyc i jaka mialaby byc struktura przesylanej tablicy?

obecnie planuje dodanie opcji wymuszenia numeru klonu, tak, zeby Cloner nie numerowal automatycznie od 0 ale od dowolnej, narzuconej mu liczby. chce np. stworzyc formularz logowania, w ktorym atrybuty NAME pol typu login, haslo, captcha czy token sa tablica o zmiennym kluczu, ktory jest rozny dla kazdego z pol przy kazdym wywolaniu strony. to takie drobne utrudnienie dla robotow, ktore nie moglyby atakowac strony logowania uzywajac stalego szablonu formularza, bo jego pola bylyby inne za kazdym razem, np login[34], login[494] itd. wystarczy zaprzac ajaxa do pobierania tych wartosci z opoznieniem i boty beda zmuszone do poddania sie opoznieniom.

mysle tez o dodaniu opcji tworzenia klonu z jakas domyslnie przypisana klasa CSS, tak zeby klon od razu mogl przyjac pewien unikalny, wymagany przez designera wyglad, zeby nie zmieniac tego za pomoca funkcji callback wywolywanej po sklonowaniu bloku, bo moze to momentami nieestetycznie wygladac.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.