![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam troszkę dzisiaj czasu i buszuję po forum. Nospor napisał gdzieś, że do generowania formularzy (i zabezpieczenia się przed F5) używa własnej klasy (chyba, że źle zrozumiałem jego wypowiedź). Jako, że próbuję się "otrzaskać" z obiektowo zorientowanym php od razu powstał w mej łepetynie pomysł "napisz sobie klasę do formularzy"... No i faktycznie, pomysł mi się podoba bo jednak formularzy jest mnóstwo na stronach, przy których coś usiłuję dłubać i gdyby się udało fajną klasę do tego zrobić, byłoby spoko. Na razie wymyśliłem to tak: 1. Główna klasa to oczywiście klasa formular 2. Do niej dodałbym klasę formField, której właściwości to $_name (nazwa pola, do wrzucenia w name="") $_label (do wrzucenia w <label></label>) i $_desc (opis pola) 3. po klasie formField dziedziczyłyby klasy inputField (z właściwością type, czyloi wartością parametru type=""), selectField (z metodą addOption), textareaField itd... 4. Strukturę formularza tworzyłbym w sposób przybliżony do tego:
wynikiem ostatniej metody byłby gotowy kod formularza. Co Wy o tym myślicie? Jaki jest lepszy sposób na to? Jeszcze muszę tu gdzieś zapodać metodę insertValue(), która by wpisywała domyślną wartość... i do pól typu checkbox i do selecta jeszcze coś w rodzaju selectCurrentValue(). Ale czy wg Was podstawowe założenia mają sens? Jeśli nie, to wskażcie mi proszę luki w moim rozumowaniu. Pozdrawiam! Tarcil |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Ok, ok a do czego twoim zdaniem w tym wypadku będzie służyło new formular();
Zresztą czemu taka dzwina nazwa? class Form {} class Field extends Form {} class InputField extends Field {} ![]() -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@bim2: class Field extends Form? Eeee... a co to ma niby wspólnego ze sobą?
![]() W obiekcie formularza jak najbardziej może znajdować się kolekcja obiektów dziedziczących po Field (które najprawdopodobniej będzie klasą abstrakcyjną) |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Hmm, inputy należą do forma. Można by znać indetyfikator forma i później w fieldzie operować na nim. Mam zaawansowaną obsługę walidacji, gdzie wykorzystuję id forma, jak jest jak nie ma sam przypisuje a później fieldy potrzebują jakiś uchwyt do niego
![]() -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 120 Pomógł: 12 Dołączył: 9.10.2008 Skąd: Tricity.Rumia() Ostrzeżenie: (0%) ![]() ![]() |
Tez cos takiego pisalem ale nie dopisalem pozatym byly to moje poczatki z OOP:] ... chętnie zobacze jak inni to rozwiązali ...
ja mialem cos takiego:
dodatkowo jeszcze byly parametry value, class(CSS), ID, valreg(nazwa funkcji validującej dane pole lub metody w klasie validatora zraca true lub komunikat błędu.) oprocz HTML obiekt potrafił zwracac XML(specjalna skladnia na potrzeby skryptu ...) i importowac formularz z XML + sprawdzanie poprawnosci z XSD. Byla tez mozliwosc zwracania tablicy z poszczególnymi polami formularza, aby można łatwo było formatowanie zmieniac i przekazac to w jakis sensowny sposob np do SMARTY. w opisie poszczególnego Field znajduje się tez komunikat wyswietlany w przypadku błędnie wypełnionego pola ... warto tez pomyslec nad jakims cachowaniem bo przeciez formularze w większości nie są dynamiczne. ewentualnie jedna klasa runtime ... druga generator :] Ten post edytował pinochet 23.01.2009, 18:44:17 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jak pisałem, zaczynam się bawić w oop. Obiekt formular miał zawierać dane formularza (więc właściwie wartości parametrów znacznika FORM) i w jakiś sposób grupować obiekty Field. Field zawierałby te dane, ktore są wspólne dla każdego z pól formularza, a obiekty inserField i im podobne miałyby dziedziczyć wspólne własności po Field i "obsługiwałyby" różnice pomiędzy typami pól.
Dzięki wszystkim za wypowiedzi... postaram sie w najbliższych dniach coś poskładać i ewentualnie wrzucę wyniki mojej pracy. Pozdrawiam Tarcil |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Z doświadczenia moge powiedziec ze lepiej sprawdzają się pojedyncze obiekty generujące pola - przykład:
Oczywiście należy napisać kilkanaście klas takich jak Select, FileInput, Button, CheckBox itd... Kiedy już masz wszystkie klasy wyswietlające mozna zabrać się do etapu tworzenai klasy form. (Jeszcze nie doszedłem do tego etapu ![]() Dlaczego takie rozwiązanie: -Bo każda przeglądarka z tego samego kodu generuje coś innego. Metoda generująca musi wykryć typ przeglądarki i uwzględnić to dodając odpowiednie style. To bardzo przyspiesza pracę. Moze ci się to rpzyda. Pozdrawiam. -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 7 Pomógł: 1 Dołączył: 29.09.2008 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Ostatnio zaprojektowałem klasy formularzy, które powiązałem z Xajaxem. Dodatkowo dodałem klasy walidujące, które są używane przez formularze jak i inne klasy w aplikacji korzystające z tych samych danych.
Jeden formularz miał z reguły około 15 pól, z czego było parę formularzy różniących się między sobą rodzajami pól. Tworzenie klasy formularza to dobry pomysł. Ja zrobiłem tak że teraz jeśli chce dodać formularz definiuję nową klasę o nazwie np. Form_MojFormularz{} w której 1. dodaje kolejno obiekty formularza (input, checkbox itd). -> metoda setFields() 2. implementuje metodę, która pobiera dane z bazy jeśli chcę wyświetlić w tym formularzu dane ->setFieldsData() 3. określam po id, które pola mają być wyłączone (disabled) -> setDisabledFields() 4. implementuje metodę zapisującą dane z formularza do bazy Można tworzyć obiekty z jednej klasy Form i tam ustawiać nazwę formularza, jednak doszedłem do wniosku, że dla moich potrzeb lepiej jest tworzyć nowe klasy dla nowych formularzy ponieważ istnieje potrzeba implementacji metod takich jak np. zapis do bazy danych. Możesz zastosować np. Dekorator dla dodawania pól do nowego obiektu formularza, ja akurat z tego nie skorzystałem bo zmniejszyłaby się czytelność mojego kodu i pola dodaje bezpośrednio wewnątrz nowej klasy formularza (do kolekcji $objTagsCollection), a kontroler w roli klienta służy mi jedynie do: uruchomienia formularza/określenia z jakiego walidatora ma korzystać kalsa formularza/określenia pliku szablonu .phtml dla formularza/określenia czy formularza pobierany jest przez wywołanie Ajaxowe czy POST. Inny patent (uzupełniając to co napisał Black-Berry) to np. każda klasa pola (TagInput{}, TagSelect{} itd) posiada metodę insertMeToXajaxResponse($objXajaxResponse). Formularze tworzę właśnie używając biblioteki Xajax, ale zostawiam możliwość wygenerowania formularza zwykłym POST'em określając to w kontrolerze. Metoda insertMeToXajaxResponse() jest w każdej klasie Taga ponieważ każdy tag w nieco inny sposób dodaje się do odpowiedzi Ajax, można oczywiście zdefiniować odrębną klasę menadżera np. AjaxFormManager{} i jej przypisać odpowiedzialność za dodawanie pól do odpowiedzi Ajax, ale to już chyba kwestia wybrania konkretnej drogi w projekcie. ![]() Ponadto każda klasa pola/taga posiada obiekt klasy TagError, jeśli podczas walidacji danych z bazy coś jest nie tak automatycznie zmienia się jego kolor na czerwono lub wykonywane są inne akcje (pomijam dlaczego zapisuje błędne dane do bazy - akurat jest taka potrzeba). Dzięki tworzeniu klasy formularza zauważysz naprawdę sporo zależności więc zachęcam do pracy. Ten post edytował WaterIntelligence 2.02.2009, 11:42:22 -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 24.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za porady
![]() Teraz muszę skończyć jedno pseudoforum dla firmy z mojego miasta. Potem mam wolne od projektów póki co, więc znów dosiądę do ćwiczenia nowych rzeczy w php. Jak napiszę klasę to wrzucę, ocenicie czy się do czegokolwiek nadaje. Na razie pozdrawiam! |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Jeśli o mnie chodzi to czekam z niecierpliwośćią bo jak będę miał już wszystkie kontrolki to chcę to połączyć w klasę Formularz. Niestety kilka razy już próbowałem i poziom abstrakcji mnie przerósł. Poległem na walidacji dlatego póki co piszę inputy. Najgorsze że większość z nich trzeba całkowicie ukrywać (opticy:0) a na ich miejsce wstawiać własne - oskryptowane obrazki.
-------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 31.07.2006 Skąd: Czeladź Ostrzeżenie: (0%) ![]() ![]() |
Najgorsze że większość z nich trzeba całkowicie ukrywać (opticy:0) a na ich miejsce wstawiać własne - oskryptowane obrazki. mozesz dokladniej wyjasnic? ja wlasnie powoli tworze klase do formularzy ![]() mam nadzieje ze taka klasa spooro czasu bedzie w przyszlosci oszczedzac ![]() zobaczymy co z tego wyjdzie ![]() -------------------- Projektowanie stron internetowych
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
mozesz dokladniej wyjasnic? Jeśli masz np. input typu file lub chociaż zwykły checkbox i jeśli będziesz chciał nadać tym inputom jakiś konkretny wygląd - bardzo szybko zauważysz że każda przeglądarka stosuje wolną amerykankę. Często zamiast checkboxa stosuję taki kod Trzeba oczywiście to jeszcze oskryptować ale dzięki nałożeniu obrazka na ukryty input mamy pewnosć, że każda przeglądarka wyrenderuje to samo. Kod odpowiedzialny za generowanie takieo kodu opkakowuję sobie w klasę i póżniej mogę już stosować ją zamiast męczyć się z przeglądarkami
Staram się uzyskac coś podobnego do obiektu formularza znanego z Delphi czy Visual C++. Tworzę też zaawansowane kontrolki np HtmlElement_ImageList, HtmlElement_TextEditor(w oparciu o tinyMCE) czy HtmlElement_ImageUploadBox Podałem tylko 1 przykład ale takich kontrolek trzeba napisać kilkanaście. Najwięcej zabawy jest z <input type="file" /> bo oczywiście każda przeglądarka inaczej rozumie width ![]() -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 31.07.2006 Skąd: Czeladź Ostrzeżenie: (0%) ![]() ![]() |
hmmm, narazie korzystam z domyslnych wygladow, dla selecta, checkboxa, oraz radio, ogolnie jak poustawiam style to sa male roznice,
i dla klienta to nie problem ![]() ale dzieki za wyjasnienie, zgadzam sie ze aby formularze zrobic podobne dla kazdej przegladarki jak sa pola jak wyzej, to jest porazka. Mam kilka pytan ![]() klasy i obiekty uzywam od jakiegos czasu, ale postanowilem wziasc sie porzadnie za to, i chce dobrze wszystko zrozumiec, i stosowac jak najlepiej ![]() dlatego ponizej tego calego kodu, beda pytania ![]() ![]()
Wynik:
Zaczne od konca ![]() Zdefiniowalem klase input, field, i type jest protected, stosuje funkcje __get, oraz __set do ustawiania pol field, praktyczne to jest? funckje generate() - zwracaja kod html. wywolanie funkcji input: $c=new input($type='text',$name='name1',$value='value wyslij',$id='id',$style='style',$class='class',$onclick=''); $c->id='nowe_id'; echo $c->generate(); w konstruktorze ustawiam najwazniejsze rzeczy ![]() $c->id, $c->value itp, stosuje sie takie cos? dla mnie ladnie to wyglada ![]() ![]() funckją setTyp($value) ustawiam type inputa, przez oddzielna funkcje, poniewaz trzeba miec kontrole akurat nad tym jednym polem ![]() A teraz klasa Form, jak w klasie input, najwazniejsze parametry ustawiam poprzez konstruktor, nastepnie kazda opcje formularza mozna ustawic tylko przez metody do tego stworzone ![]() mam tutaj glownie pytania, jak tworzyc nowe pola w takim formularzu ![]() dalem 4 sposoby:
jak trzeba wyjasnien do tych sposobow napiszcie, a wyjasnie ![]() -------------------- Projektowanie stron internetowych
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
troche dzina konstrukcja, moim zdaniem powinno to być tak:
Cos takiego -------------------- |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 31.07.2006 Skąd: Czeladź Ostrzeżenie: (0%) ![]() ![]() |
z definiowaniem klasy form, sie zgadzam, jeszcze ulepsze,
ale wedlug mnie to zly pomysl umieszczac tworzenie pol w jednej klasie html_elements, chyba ze bedzie klasa form, dziedziczaca po html_elements, a w html_elements bedzie dodawalo sie odpowiednie pola, a kazde pole jest oddzielnym obiektem jak u mnie. Wydaje mi sie ze to bylo by najlepsze wyjscie ![]() co wy na to ? jesli nie moze byc kazde pole definiowane przez obiekt, podaj mi wyjasnienie dlaczego ![]() -------------------- Projektowanie stron internetowych
|
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
ale oczywiscie, html elements ma miec tylko dane regulki
class Input extends HTML_ELEMENTS {} itd. ale robisz tak $oInput = new Input(); $oForm = new Form(); $oForm->append($oinput);
-------------------- |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 31.07.2006 Skąd: Czeladź Ostrzeżenie: (0%) ![]() ![]() |
hmmm, a nie lepiej tworzyc obiekty w klasie html_elements ? wydaje mi sie niepotrzebne tworzyc pozaklasa form, a pozniej przenosic do klasy
![]() dla mnie to troche nielogiczne -------------------- Projektowanie stron internetowych
|
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 663 Pomógł: 6 Dołączył: 3.06.2007 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Idealnie powinno być tak:
Już samo napisanie generatora kodu to nie mały problem ale to i tak przysłowiowy 'pikuś' jeśli zaczniemy myśleć o walidacji (walidacji PHP a nie JS). Ja osobiscie chciałbym mieć poniższe metody:
a do tego najlepiej żeby była metoda
i tu zaczynają się schody. Bez definiowania akcji która wykonuje się po zwalidowaniu formularza cała praca jest niepotrzebna bo do generowania kodu HTML wystarczą same kontrolki ![]() -------------------- http://www.berry.nazwa.pl/edico/public_html/index.php ----> under construction
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 31.07.2006 Skąd: Czeladź Ostrzeżenie: (0%) ![]() ![]() |
dzieki za nakierowanie, wlasnie cos podobnego planowalem zrobic, ale jeszcze mi nie calkiem switalo w glowie,
sposob walidacji juz takze mam w glowie, bo mam odpowiednie funkcje zrobione, oraz sposob wyswietlania, wiec tylko trzeba to dobrze do klasy wcisnac ![]() -------------------- Projektowanie stron internetowych
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Ale co za prbolem z validacją? Validacja w tych klasach to pikuś bez klas, tj szukaniu w kodzie <input>
![]() tj. On sobie rozpoznaje, i wywoluje Error_Check_Min[_Max][_Checkmail] Naprawdę validacja to pikuś... -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 22.07.2025 - 13:49 |