Autor | Zpráva | ||
---|---|---|---|
martindeveloper Profil |
#1 · Zasláno: 28. 11. 2009, 13:17:57 · Upravil/a: martindeveloper
Dobrý den.
Rád bych chtěl slyšet Váš názor na následující kód. Jedná se mi o přehlednost a hlavně jednoduchost tvorby formulářů. Snažím se možným vývojářům komponent/modulů poskytnout co největší komfort. Výsledek kódu lze vidět zde : http://vcms.ifrit.eu/testForm Mimochodem třetí parametr u pravidel určuje zda-li se pro něj má generovat JS (defaultně true pokud je $form->useJs = true). Děkuji za názory. <?php $form = new Form; $form->useJs = true; $form->setQuestion('Kolik kol má osobní automobil'); $form->setAnswer(4); $form->addGroup('Hlavní'); $form->addTextbox('name', 'Uživatel')->addRegex('/^[a-z0-9]*$/i', 'Uživatel nesmí obsahovat speciální znaky !') ->notEmpty('Položka "Uživatel" nesmí být prázdná !') ->setMinLength(4, 'Minimální délka uživatele jsou 4 znaky !') ->equal('martin', 'Nesprávný uživatel !', false); $form->addPassword('pass', 'Heslo')->onlyNumeric(0, 'Heslo může být pouze celočíselné !') ->equal('1425', 'Nesprávné heslo !', false); $form->addTextbox('email', 'Email')->notEmpty('Položka "Email" musí být vyplněna !') ->addRegex(Form_vars::Email, 'Neplatný formát emailu !'); $form->addTextbox('url', 'Web')->notEmpty('Položka "Web" musí být vyplněna !') ->addRegex(Form_vars::Url, 'Neplatný formát adresy webu (např.: http://mujweb.cz/) !'); $form->addTextbox('date', 'Datum narození (rok-měsíc-den)')->addRegex(Form_vars::DateFormat, 'Neplatný formát data !'); $form->addGroup('Pravidla'); $form->addCheckbox('licence', 'Souhlasíte s pravidly', 'yes')->equal('yes', 'Pro pokračování musíte souhlasit s pravidly !'); $form->addGroup('Ostatní'); $form->addTextarea('signature', 'Podpis')->notEmpty('Podpis nesmí být prázdný !'); $form->addTextbox('ip', 'Vaše IP adresa', $_SERVER['REMOTE_ADDR'])->addRegex(Form_vars::IPv4, 'Neplatná IP adresa !'); $form->addCaptcha(); $form->addLine('<br />', true); $form->addSubmit('submit', 'Odeslat'); $form->addReset('reset', 'Smazat'); if ($form->isSubmitted()) { if ($form->isHuman()) { if ($form->isValid()) { Text::h2('Gratuluji ! Vše je správně !'); } }else{ Text::p('Neplatná odpověď !', 'form_message'); } } echo $form; |
||
Alphard Profil |
#2 · Zasláno: 28. 11. 2009, 13:42:17
Dost mi to připomíná Nette. Ale zrovna formuláře v něm moc neznám, četl jsem jen pár náborových článků. Vcelku se mi to ale líbí. Doplním tady spíš pár tipů, co doplnit.
->setMinLength(4, 'Minimální délka uživatele jsou 4 znaky !') Tady se mi nelíbí, že je nutné dvakrát měnit hodnotu, nešlo by tam dát zástupný znak, třeba %i? $form->setQuestion('Kolik kol má osobní automobil'); $form->setAnswer(4); Tady by se mohlo třeba umožnit více otázek a jedna by se náhodně vybrala. $form->setCaptcha('Kolik kol má osobní automobil', 4); $form->setCaptcha('Hlavní město Francie', "Paříž"); $form->addTextbox('ip', 'Vaše IP adresa', $_SERVER['REMOTE_ADDR']) Kdybych chtěl při editaci dat jen předat pole formuláří s tím, že zadané hodnoty doplní na základě klíče a name, bylo by to moc? Např. $form->addTextbox('name', 'Uživatel'); $form->addPassword('pass', 'Heslo'); $form->addTextbox('email', 'Email'); $form->addTextbox('url', 'Web'); $values = array ('name' => 'Uživatel', 'url' => 'adresa'); $form->addValues($values); |
||
martindeveloper Profil |
#3 · Zasláno: 28. 11. 2009, 13:54:42
Díky za tipy, určitě dodělám.
Jinak Nette sice znám, ale nikdy jsem ho nepoužíval takže podobnost je pouze náhodná. Nějaké další tipy ? |
||
Aesir Profil |
#4 · Zasláno: 28. 11. 2009, 14:15:28
martindeveloper:
„Jinak Nette sice znám, ale nikdy jsem ho nepoužíval takže podobnost je pouze náhodná.“ On skoro každý framework obsahuje podobnou třídu (komponentu) pro vytváření formulářů. „Nějaké další tipy ?“ Spíš otázky, jak bych mohl jako vývojář ovlivnit způsob vykreslení formuláře? A jakým způsobem bych mohl rozčlenit formulář do více, na sobě, závislých částí, abych mohl jednodušše vytvářet vícekrokové formuláře? |
||
martindeveloper Profil |
#5 · Zasláno: 28. 11. 2009, 14:24:07 · Upravil/a: martindeveloper
Vykreslení formuláře lze zatím ovlivnit pomocí třetího parametru v konstruktoru (v budoucnu chci doplnit metodu loadTemplate() pro valstní šablony ), který může být : table (default), paragraph (řádky do <p> názvy skupin do <h3>), ulist (<ul>, <li>, <li><h3>) nebo fieldset (<fieldset>, <p>, <legend>).
Vícekrokové formuláře to zatím neumí, ale dobrý tip pro další featuru (resp. jednoduše by to šlo přes JS, ale pokud každé odeslání má být refresh stránky tak to zatím neumí). A jako další featuru právě dodělávám $form->useAjax = true; $form->ajaxTargetDiv = 'id divu do kterého se nacpe výsledek ajax requestu'. Nějaké další návrhy ? EDIT: Ještě jsem zapomněl že každému prvku lze nastavit class a i celému formuláři lze nastavit class nebo id. Hotovo - Zástupný znak %i dodělán - Více otázek do captcha doděláno (náhodné vybírání) Pracuje se - Ajax (90%) - addValues (50%) - Vícestránkové formuláře (přes JS - 100%, přes refresh 20%) - loadTemplate (0%) |
||
Časová prodleva: 14 let
|
0