Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kilka słow o generowaniu formularzy
Vomit
post 10.07.2006, 19:47:12
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


Witam,

Wiele czytalem, googlowalem i czesto spotykalem sie z programistami wykorzystujacymi w swoich projektach biblioteki generujace formularze.

Natrafilem m.in. na PEAR'owski QuickForm, OPF i Former Bastiona.

Sa to spore biblioteki, wspierajace JS, a nawet AJAX. OPF posiada podobno takze zaimplementowany router oraz obiekt request.

Nie wiem jednak czy jest sens wykorzystywac tak wielki kombajn, chce wiec zaprosic do dyskusji - jak napisac prosta, ale kompletna, ciekawa klase do generowania formularzy?
Go to the top of the page
+Quote Post
Ludvik
post 10.07.2006, 20:57:49
Post #2





Grupa: Przyjaciele php.pl
Postów: 698
Pomógł: 3
Dołączył: 28.03.2004
Skąd: Wrocław

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


Ja jestem w trakcie tworzenia swojego rozwiązania i powiem Ci tak: prostego nie stworzysz. Jak utniesz kilka klas, to będziesz musiał dopisać kilka metod. Same formularze są dosyć skomplikowanym narzędziem i nie ma prostego sposobu na zapanowanie nad nimi. A czy jest sens to tworzyć? Do prostych aplikacji nie ma sensu, natomiast do większych stron może być uzasadnione.

Póki co mam poglądowy diagram przedstawiający mój pomysł. Sporo jest do zrobienia, ale koncepcja jest mniej więcej widoczna. Miło by było, gdyby ktoś to skomentował smile.gif

http://img104.imageshack.us/img104/6687/main1zf.jpg

Ten post edytował Ludvik 10.07.2006, 20:59:12


--------------------
Go to the top of the page
+Quote Post
Diwi
post 10.07.2006, 21:11:24
Post #3





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

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


Cóż, ja jak narazie pisze sobie prostą bibliotekę do generowania formularzy tworzonych bez ingerencji w kod php. Przykładowy kod formularza to coś takiego (w planach chociaż częśc już zakodowana):

Kod
<form:init name="rejestracja">
   <label for="imie">Imię:</label>
   <form:text name="imie" />
   <form:validate field="imie" type="notEmpty">Imię nie może być puste</form:validate>

    <label for="nazwisko">Nazwisko:</label>
    <form:text name="nazwisko" />
    <form:validate field="nazwisko" type="notEmpty">Nazwisko nie może być puste</form:validate>

    <label for="haslo">Hasło:</label>
    <form:password name="haslo" />
    <form:validate field="haslo" type="notEmpty">Hasło musi zostać wpisane</form:validate>

    <label for="powtorz_haslo">Powtórz hasło:</label>
    <form:password name="powtorz_haslo" />
    <form:validate field="haslo" type="notEmpty">Musisz powtórzyć wpisane hasło</form:validate>
    <form:validate field="haslo" compareField="powtorz_haslo" type="compare">Wpisane hasła nie są takie same</form:validate>

</form:init>


Tak to mniej więcej wygląda. Niedługo zapewne przedstawie kod źródłowy
Go to the top of the page
+Quote Post
Vomit
post 10.07.2006, 21:33:50
Post #4





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 23.01.2006

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


No wlasnie, bo to tez jest rzecza dyskusyjna.

Jedni generuja gotowy formularz i jedynie przypisuja go zmiennej w systemie szablonow a drudzy, preferuja takie rozwiazanie jakie podał Diwi.

Ktore lepsze?
Go to the top of the page
+Quote Post
MMP
post 10.07.2006, 21:53:53
Post #5





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 2.06.2006

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


Diwi, testowałem już podobną koncepcje - ... - jest do dużo więcej pisania niżeli potrzeba i w dodatku takie .. nie wygodne.

Moja biblioteka formularzy składa się z dwóch klasa (Form, ValidateForm) + wtyczki fo klasy szablonów

To co zaprezentował divi u mnie by wyglądało tak:

Kod
{form id="NameForm"}
Imię: <input type="text" name="NameForm[Imie]" />
{if #Error[Imie]}
{#Error[Imie][0]} <!-- Wyświetla pierwszy błąd -->
{/if}
Nazwisko: <input type="text" name="NameForm[Nazwisko]" />
{if #Error[Nazwisko]}
{#Error[Nazwisko][0]} <!-- Wyświetla pierwszy błąd -->
{/if}
Hasło: <input type="text" name="NameForm[Haslo]" />
{if #Error[Haslo]}
{#Error[Haslo][0]} <!-- Wyświetla pierwszy błąd -->
{/if}
Powtorz haslo: <input type="text" name="NameForm[ReHaslo]" />
{/form}

i w php
  1. <?php
  2. $oForm = new Form( "NameForm" );
  3. $oValidateForm = new ValidateForm( "Imie" );
  4. $oValidateForm -> is();
  5. $oForm -> errorVal( $oValidateForm );
  6. $oValidateForm = new ValidateForm( "Nazwisko" );
  7. $oValidateForm -> is();
  8. $oForm -> errorVal( $oValidateForm );
  9. $oValidateForm = new ValidateForm( "Haslo" );
  10. $oValidateForm -> is();
  11. $oValidateForm -> equal( $oForm -> ReHaslo() );
  12. $oForm -> errorVal( $oValidateForm );
  13. $oTemplate -> form( $oForm );
  14. ?>

$oValidateForm wysyła kod błędu do $oForm, a $oForm pobiera odpowiedni string z plików językowych smile.gif

[Dodano] Ludvik, popitoliło Cię z tym diagramem smile.gif. Takie rozbicie nie ma sensu jeżeli chodzi o aplikacje http

Ten post edytował MMP 10.07.2006, 21:54:08
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 09:38