Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obiektowe formularze?
Forum PHP.pl > Inne > Hydepark
Vomit
Jaki jest tego sens? Czy biblioteka QuickForm to dobra biblioteka? W czym ma przewage nad zwyklymi formularzami?
nospor
Nie wiem jak dziala QuickForm - nie uzywalem.
Wiem natomiast że jest sens korzystania z klas do formularzy (korzystam z wlasnej winksmiley.jpg ). Oczywiscie do tych rozbudowanych. Do formularza w stylu login i haslo nie ma co zaprzegac tego mechanizmu.

Dzięki takim klasom nie musisz się martwic w implementowanie walidatorów dla pol po stronie js czy php. Mowisz tylko, ze to pole ma byc walidowane jako int, nie moze byc puste i jeszcze cos tam i juz sie o nic nie martwisz. wszystko zalatwi ci klasa.
Formularze wielostronicowe. Poprostu bajka. Juz sie nie martwisz ze musisz pamietac pola z innych stron. To wszystko zrobi za ciebie klasa. ty tylko mowisz ze to pole nalezy do tej strony i juz.
Wersja do wydruku. Nie wiem jak to w innych jest, ale u mnie jest, ze ja ustawiam parametr preview na true i juz mi sie caly formularz generuje w wersji do wydruku. moge se ewentualnei zmienic jeszcze szablon, ale w wiekszosci wypadkow mi starcza winksmiley.jpg
Kazda klasa moze miec jeszcze inne mozliwosci. Ja se przykladowo dorobilem sekcje, dzieki czemu moge se w foemularzu dynamicznie dodawac pola (grupy pól- sekcje) i mi to klasa wychwyci i zwaliduje. Dorobilem se pola zależne od innych. czyli ze jesli odznacze jakiegos checkboxa, to mi inne pola znikają lub sie pojawiają w zaleznosci jaki tryb wybralem. Ja juz nie musze pisac js do tego. To mi robi klasa.
I wiele innych smile.gif

POdsumowując: klasy do formularzy do duuuza oszczędnośc czasu i przejrzystość kodu winksmiley.jpg
Bastion
@nospor: projektuje swoja klase do budowania formularzy, dlatego mam pytanie - korzystasz z dobrodziejst ajaxa w swoim?
hwao
Ja swoje napisalem tak, ze teraz zrobienie formularza to nie duza chwila czasu, wraz z walidacja, wypelnianiem odpowiednio pol, dodawaniem roznych dodatkow bbcode/ajax itp. Imho warto, ale trzeba uwazac zeby nie przesadzic z OOP ;] bo bedzie zamulac
nospor
@Bastion nie. niestety za ajaxa jeszcze się nie bralem. czas najwyzszy, ale jakos nie ma kiedy. Ale takie posty to moze na PW, chyba ze bedzie jakis glębszy związek z tematem topicu.
Choc w sumie moze i jest tu związek: @Vomit te klasy mogą za ciebie uzywać ajaxa winksmiley.jpg
Vomit
Rozumiem, ze logowanie to wyjatek, poniewaz czy to dodawanie komentarza do newsa, czy tez rejestracja powinna byc przedstawiona za pomoca obiektowych formularzy?

Mozecie polecic cos innego niz Quick Form? O innych bibliotekach nie slyszalem. Z jakich wy korzystacie?
nospor
Cytat
dodawanie komentarza do newsa
a co bedziesz mial w tym formularzu? textarea do dodania komentarza. cos jeszcze? Do jednego pola nie ma co zaprzegac calego mechanizmu. Klasy do formularzy wykorzystuje sie przy rozbudowanych formularzach, gdzie korzyści z tego są największe. mozna tez oczywiscie i do jednego pola zaprząc, ale większy z tego spadek wydajnosci niz korzyść winksmiley.jpg

Jakie klasy? Ja uzywam wlasnej. Jak mi cos brakuje to dodaje. Ale juz mi chyba nic nie brakuje (nie licząc piątej klepki laugh.gif )

Poszukaj na phpclasses.org tam jest duzo tego
dr_bonzo
phpObjectForms
http://pof.sourceforge.net/
ale nie uzywalem biggrin.gif
Vomit
w takim razie jak pogodzic obiektowe formularze z systemami szablonow? Wiem, ze niektorzy tworza pluginy do systemow szablonow, dzieki ktorym jest mozliwe tworzenie formularzy w szablonie. Co zrobic gdy jest inaczej?
Ociu
np. tak:
  1. <?php
  2. function render() {
  3. $form = '<form action="wynik.php">';
  4. $form .= '<input name="name" />';
  5. $form .= '</form>';
  6.  
  7. return $form;
  8. }
  9.  
  10. $this->assign('form', render());
  11. ?>
nospor
moja klasa dziala w oparciu o szablony, a konkretnie o smarty.
wygląda to tak:
pola definiuje w php. metoda klasay: AddInput.
Natomiast umiejscowiam je w szablonie o tak: {input name="nazwapola"}
Mozliwe jest to dzieki temu, iz definiuje prefilter w smartym, dzieki czemu najpierw parsuje szablon, a pozniej wystąpienia moich pol zamieniam na pluginy. wszystko proste i przejrzyste winksmiley.jpg

przykladowy kod php:
  1. <?php
  2.  
  3.     $form=new Formr(); //stworzenie obiektu 
  4.  
  5.     $form->SetErrorMethod('blad');//ustawienie metody obsługującej komunikaty błędu
  6.  
  7.     $form->errorClass='error'; //klasa css dla wyświetlania błędów
  8.  
  9.  
  10.  
  11.     //dodanie pola
  12.  
  13.     $form->AddInput(array(
  14.         'type'=>'text',
  15.         'id'=>'id1',
  16.         'label'=>'x',
  17.     ));
  18.     $form->AddInput(array(
  19.         'type'=>'text',
  20.         'id'=>'id11',
  21.         'label'=>'x',
  22.     ));
  23.     $form->AddInput(array(
  24.         'type'=>'textarea',
  25.         'id'=>'id2',
  26.         'label'=>'x',
  27.     ));
  28.     $form->AddInput(array(
  29.         'type'=>'checkbox',
  30.         'id'=>'id3',
  31.         'label'=>'x',
  32.     ));
  33.     $form->AddInput(array(
  34.         'type'=>'submit',
  35.         'id'=>'go',
  36.         'label'=>'x',
  37.     ));
  38.  
  39.     $verify=array();//tablica z polami błędnymi
  40.     if ($form->WasSubmit('go')) //czy wciśnięto go
  41.  
  42.     {
  43.  
  44.         $form->SetValues();//przypisanie wartości do pól
  45.  
  46.         $error=$form->Validate($verify);
  47.  
  48.         if (!$error && !$form->WasThisOperation())
  49.  
  50.         {//action
  51.  
  52.             
  53.  
  54.         }
  55.  
  56.     }
  57.  
  58.     
  59.     $form->AssignData($template);//przypisanie niezbędnych danych do obiektu smarty'ego
  60.     $template->assign('mark','<span style="color: red">[Popraw]</span>');//przypisanie komunikatu błędu
  61.     $template->assign_by_ref('verify',$verify);//przypisanie tablicy z błędnymi polami
  62. $template->register_prefilter('smarty_prefilter_formr');//załadowanie prefiltru
  63. ?>
To jest bardzo podstawowy i uproszczony kod winksmiley.jpg
szablon:
  1. {form_start}
  2. <table >
  3. <tr>
  4. <td>{label for="id1"}</td>
  5. <td>{input name="id1"}</td>
  6. </tr>
  7. <tr>
  8. <td>{label for="id11"}</td>
  9. <td>{input name="id11"}</td>
  10. </tr>
  11. <tr>
  12. <td>{label for="id2"}</td>
  13. <td>{input name="id2"}</td>
  14. </tr>
  15. <tr>
  16. <td>{label for="id3"}</td>
  17. <td>{input name="id3"}</td>
  18. </tr>
  19. <tr>
  20. <td colspan="2">{input name="go"}</td>
  21. </tr>
  22. </table>
  23.  
  24.  
  25. {form_end}

Tylko nie gancze mnie za <Table> - to stary kod smile.gif
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.