Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Proste Tworzenie formularza
zietas
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 11.06.2007

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


Raczkuje w OOP.
Napisałem nasępujący powiedzmy sobie szczerze 'bardzo prosty generator formularza'.
  1. <?php
  2. class FormGenerator
  3. {
  4.  
  5. public function formOpen($action,$file)
  6. {
  7. if($file)
  8. {
  9. return $formStart = '<form method="post" action="'.$action.'" enctype="multipart/form-data">';
  10. }
  11. else
  12. {
  13. return $formStart = '<form method="post" action="'.$action.'">';
  14. }
  15. }
  16.  
  17. public function formInput($label,$type,$name)
  18. {
  19. return $input = ' <label for="'.$name.'">'.$label.'</label>: <input type="'.$type.'" name="'.$name.'" id="'.$name.'" />';
  20. }
  21.  
  22. public function formTextarea($label,$name,$char_width,$num_lines)
  23. {
  24. return $textarea = '<label for="'.$name.'">'.$label.'</label>: <textarea name="'.$name.'" cols="'.$char_width.'" rows="'.$num_lines.'" id="'.$name.'"></textarea>';
  25. }
  26.  
  27. public function formSelect($label,$name,$value,$option)
  28. {
  29. return $select = '<label for="'.$name.'">'.$label.'</label>: <select name="'.$name.'" id="'.$name.'"><option value="'.$value.'">'.$option.'</option></select>';
  30. }
  31.  
  32. public function formBtn($type,$value,$close)
  33. {
  34. if($close)
  35. {
  36. return $input = '<input type="'.$type.'" value="'.$value.'" /></form>';
  37. }
  38. else
  39. {
  40. return $input = '<input type="'.$type.'" value="'.$value.'" />';
  41. }
  42. }
  43. }
  44. ?>


No i moj formularz tworze nastepujaco:
  1. <?php
  2. require_once('class.FormGenerator.php');
  3.  
  4. $form = new FormGenerator();
  5.  
  6. echo $form->formOpen('contact.php',false);
  7. echo $form->formInput('Pierwszy','text','pierwszy_text');
  8. echo $form->formInput('Drugi','text','drugi_text');
  9. echo $form->formBtn('submit','Send',true);
  10. ?>


Czy jest to w miare poprawne?
Czy musze inaczej do tego podejsc? Jezeli tak, to jak?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Seth
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


A moze cos w ten desen:

  1. <?php
  2.  
  3. $form = new Form(null, 'cos.php');
  4.  
  5. $form
  6. ->add(new Input('test'))
  7. ->add(new SubmitButton('send', 'Wyślij'));
  8.  
  9. echo $form;
  10.  
  11. ?>


Form to obiekt formularza. Gdzie pierwszy parametr to nazwa formularza, drugi to akcja do wywolania, trzeci to metoda itd.
Zmienne te mozna takze byloby ustawic przez $form->name, $form->action itd.

Input to pole typu input (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Gdzie pierwszy parametr w konstruktorze to name.

SubmitButton dziedziczy po Input,przeslaniajac prametr type na "submit".

Wszystkie klasy dziedzicza po klasie HtmlObject ktora zawierala by podstawowe zmienne jak name, id, class (w RFC do HTMLa jest szczegolowo opisane jakie sa podstawowe atrybuty dostepne w kazdym z elementow).


Metoda Form::add() dodaje do listy obiekty, ktore maja sie znajdowac w formularzu i zwraca "obiekt samej siebie" (dzieki temu mozemy korzystac ze struktury ->funkcja()->funkcja()->funkcja() etc.

Klasa Form przeslania metode __toString() w ktorej to przechodzi po wszystkich obiektach, ktore zostaly dodane przez funkcje add() i wywoluje na nich metode __toString() dolaczajac ja do swojego kodu wynikowego.
Jako, ze klasa Form przeslania __toString() mozemy uzyc prostego echo $form.
Go to the top of the page
+Quote Post
matix
post
Post #3





Grupa: Zarejestrowani
Postów: 278
Pomógł: 10
Dołączył: 13.02.2007
Skąd: Rybnik

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


Z nudów, napisałem sobie klasę, opierając się na tym, co napisał @Seth:

  1. <?
  2. interface Inputs {
  3. public function __toString();
  4. }
  5.  
  6. class Input implements Inputs {
  7. public function __construct($type, $name, $value = '')
  8. {
  9. $this->sInput = sprintf('<input type="%s" name="%s" value="%s"/>', $type, $name, $value);
  10. }
  11.  
  12. public function __toString()
  13. {
  14. return $this->sInput;
  15. }
  16. }
  17.  
  18. class form {
  19.  
  20. private $sResult = '';
  21.  
  22. function add(Inputs $input = null)
  23. {
  24. $this->sResult .= $input.$this->sLimit;
  25. return $this;
  26. }
  27.  
  28. function __toString()
  29. {
  30. return $this->sResult;
  31. }
  32.  
  33. function setLimit($string)
  34. {
  35. $this->sLimit = $string;
  36. }
  37.  
  38. }
  39.  
  40. $f = new form;
  41.  
  42. $f->setLimit("<br/>\n");
  43.  
  44. $f
  45. ->add (new Input('text', 'login'))
  46. ->add (new Input('text', 'password'))
  47. ->add (new Input('text', 'mail'))
  48. ->add (new Input('submit', 'send', 'sendit'));
  49.  
  50. echo $f;
  51.  
  52. ?>
Go to the top of the page
+Quote Post
zietas
post
Post #4





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 11.06.2007

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


dzieki wielkie, zaraz bede analizowal (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Speedy
post
Post #5





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


Można by dodać do tej klasy jeszcze labele i np. paragrafy <p> zamiast tego setLimit() (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Go to the top of the page
+Quote Post
destroyerr
post
Post #6





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Można by skorzystać z formularzy w symfony 1.1, albo się na nich wzorować. Jak dla mnie są naprawdę nieźle zrobione (z tego co wyczytałem wzorowali się na formularzach z django).
Go to the top of the page
+Quote Post
domis86
post
Post #7





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


Wszystko pieknie ladnie, ale co jak trzeba pozniej to wystylowac? Pododawac classy cssowe? Ujac w rozne divy rozne elementy? Czy sobie poradzi z tym templater? Najlepiej uzywac prostych helperow do poszczegolnych elementow w templacie, albo w ogole bez helperow (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował domis86 2.01.2008, 19:15:32
Go to the top of the page
+Quote Post
zietas
post
Post #8





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 11.06.2007

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


Cytat(Speedy @ 2.01.2008, 02:36:59 ) *
Można by dodać do tej klasy jeszcze labele i np. paragrafy <p> zamiast tego setLimit() (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .


to tam jest najmniejszy problem. Z dodaniem klas itd.

Problem tkwi w napisaniu tego poprawnie w OOP (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ja sobie powoli cos 'powaznego' z tego tworze (wykorzystujac np. labele, css).


Dzieki Seth i matrix za pomoc.
Go to the top of the page
+Quote Post
Seth
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


np (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Co do helperow i symfony, to nie sa one przeciez obiektowe. A o to chodzilo zietasowi.
Poza tym nie widze zadnego problemu aby dodac np. w konstruktorze dodatkowy parametry dla wyboru klasy czy wpisania stylu.

Co do setLimit to mozna by to obejsc przez stworzenie obiektu Paragraph (<p>) w taki sposob:

  1. <?php
  2. $p = new Paragraph();
  3.  
  4. $p->add(new Input('text', 'login'))
  5.  
  6. $form->add($p);
  7. ?>


OBiektowka pelna geba (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)


Nawiasem mowiac ciekawie zrobiono to w Prado - identyczna funkcjonalnosc jak ta w ASP.NET (kontrolki webowe).
Tutaj sa przyklady uzycia wraz z kodem zrodlowym: http://pradosoft.com/demos/quickstart/?pag...ntrols.Standard

Ten post edytował Seth 5.01.2008, 11:10:40
Go to the top of the page
+Quote Post
destroyerr
post
Post #10





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Seth ale nikt nie pisał tutaj o helperach z symfony, które rzeczywiście nie są obiektowe. Pisałem o formularzach w symfony1.1 a są one tam całkowice inne niż w niższych wersjach. Pełna obiektowość (widgety "zastąpiły" helpery) no i można konfigurować formatownie formularza.
Dorzucę linki:
http://www.thatsquality.com/section-name/symfony
http://redotheweb.com/2007/12/21/sfforms-t...sing-component/
http://www.aide-de-camp.org/talk/7/interna...007?position=40
http://trac.symfony-project.com/browser/branches/1.1/lib

Ten post edytował destroyerr 5.01.2008, 13:59:28
Go to the top of the page
+Quote Post
Seth
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

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


Hmm ciekawe, ale z pierwszego linku kod nie wydaje mi sie zbyt intuicyjny.
Chociaz tak samo mowilem kiedy zobaczylem ta mase katalgow jakie symfony tworzy, a teraz juz sie przywyczailem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 14:51