Nejčtenější
- Opensource pro komerční weby. Vážně? (2122)
- Žižkovský Svět piva s pachutí rzi (2026)
- TinyMCE a schopný file manager (1734)
- Odcházení | Václav Havel (1677)
- 2minutová sexy ikonka v Inkscape - návod (1387)
- Vše pro dobro světa a Nošovic | Vít Klusák (1330)
- Vaše kočka umírá. Bude to 380,-. Další. (1330)
- Windows a linuxový ext filesystem (1309)
- SSL certifikát a jeho instalace (1292)
- Nebuď labuť, řekni to tričkem (1291)
- Velikost inputu text a password v IE (1277)
- Přitahují inzertní servery negramotné lidi? (1185)
-
Nejnovější blokování
- Podmíněná pole ve formuláři jednoduše pomocí Nette a jQuery
- Školství je zombieland
- Žižkovský Svět piva s pachutí rzi
- Internet Explorer 6 – navěky sbohem
- Opensource pro komerční weby. Vážně?
- 2minutová sexy ikonka v Inkscape – návod
- Rango | Gore Verbinski
- Klaus není bláznivý podivín
- SSL certifikát a jeho instalace
- Přitahují inzertní servery negramotné lidi?
Rubriky
- Design a grafika (9)
- Filmy (22)
- Fotografování (3)
- Gastronomie (1)
- Hudba (3)
- Nezařazené (8)
- PHP prakticky (23)
- Počítač, náš kamarád (8)
- Tvorba webových stránek (22)
- Vzdělávání (1)
Štítky
apache autorská práva autorský zákon bezpečnost bílo captcha captcha diakritika databáze design distributoři domácí server DTP easyphp email formuláře Gimp grafika hardware HDD Inkscape inzeráty jazz jquery mysql Nette Framework ob_start opensource PDF PHP emailová adresa PHP prakticky platební brána pole programování prázdné místo seznam měst seznam měst Česko seznam obcí seznam obcí a měst ČR seznam obcí Česko SMS brána software SQL SSD disk truecrypt šifrování
Podmíněná pole ve formuláři jednoduše pomocí Nette a jQuery
Velmi jednoduchý, rychlý a znovupoužitelný postup na vytváření formuláře s podmíněně zobrazenými poli. Ukážeme si na příkladu kontaktního formuláře.
Takže příkládek: mám kontaktní formulář, kam uživatel vyplní své jméno, email, předmět zprávy a text zprávy. Chci dostat ihned co nejpřesnější informace, tak místo libovolného předmětu (
input text) nabídnu výběr z několika možností (select). Zabývám-li se vším kolem webů, tak nabídnu např. možnostitvorba webových stránek | grafika | programování | SEO. Přesto ale nechci uživatele nikam tlačit, kdyby mě chtěl kontaktovat ohledně něčeho, co není ve výběru (aneb kontrolovaná svoboda pro každý web!). Proto k možnostem v dropdownu přidám ještějinéa ideální by bylo, kdyby ve chvíli, kdy uživatel cvakne najiné, vyjelo políčko, kam by uživatel mohl své téma specifikovat. Jak na to?Formulář v Nette
Nejdřív vysmrkneme formulářík pomocí Nette:
function createComponentContactForm() { $form = new Form; $form->addText("name", "Vaše jméno:") ->addRule(Form_::FILLED, "Prosím vyplňte jméno."); $form->addText("email", "Váš email:") ->addRule(Form_::FILLED, "Prosím vyplňte Váš email.") ->setEmptyValue("@") ->addRule(Form_::EMAIL, "E-mail nevypadá jako platná adresa."); $form->addSelect("subject", "Mám zájem o:", array( "tvorbu webových stránek" => "tvorbu webových stránek", "grafiku" => "grafiku", "programování" => "programování", "SEO" => "SEO", "jiné" => "jiné", )) ->addRule(Form_::FILLED, "Prosím vyberte předmět zájmu.") ->controlPrototype->class("subject"); $form->addText("another", "Jiný předmět zájmu - upřesněte:") ->addConditionOn($form["subject"], Form_::EQUAL, "jiné") ->addRule(Form_::FILLED, "Prosím vyplňte jiný předmět zájmu."); $form["another"]->controlPrototype->class("another"); $form->addTextArea("message", "Text zprávy:", 40, 3) ->addRule(Form_::FILLED, "Prosím vyberte text zprávy."); $form->addSubmit("send", "Odeslat"); $form->onSuccess[] = callback($this, "contactFormSubmitted"); return $form; }A metodu pro schroustání formuláře:
function contactFormSubmitted($form) { try { $values = $form->values; // process data and send mail - put mail code here or whatever you want $this->flashMessage("Zpráva byla v pořádku odeslána."); $this->redirect("Homepage:"); } catch (AuthenticationException $e) { $form->addError($e->getMessage()); } }Ukazovátko píchám na následující věci, které by neměly uniknout pozornosti:
subjectje přidaná třídaclass="subject"anotherje přidaná podmínka pro vyhodnocování – pokud je v dropdownu vybrána hodnotajiné, toto pole musí být vyplněno. Tomuto poli je rovněž přiřazena třídaclass="another"Fičurky s jQuery
Formulář máme hotový a bude fungovat. Ještě pro blaho uživatele přidáme fičurku, kterou skryjeme pole another, aby neotravovalo, když jej uživatel nebude potřebovat. A naopak aby vyskočilo, když po uživateli chceme, aby do něj něco nabušil. Do šablony pod vykreslený formulář tedy přidáme skriptík:
$(".another").parent().parent().hide(); $(".subject").change(function() { if ($(this).val() == "jiné" ) { $(".another").parent().parent().show("fast"); } else { $(".another").parent().parent().hide("fast"); } });Řečeno slovy humanitními: skryj pole
another. Pokud někdo bude hrabat do selectusubjecta pokud bude hodnotajiné, poleanotherzase ukaž. V jQuery kódu je trochu přeparentováno, je to proto, že používám výchozí vykreslování formuláře, tedy celý form je vykreslován do tabulky a každý prvek je v řádku tabulky..parent().parent()znamená, že chci skrýt celý řádek s tabulkou, nikoli jen samotné pole nebo samotnétd. Pokud používáte vlastní vykreslování formulářů, bude kód vypadat trochu jinak, a jistě jsou i jiné možnosti, jak zaměřit řádek tabulky.Tím máme hotovo. Tento princip je uplatnitelný na další formuláře, kde chceme skrýt některé inputy a podmíněně je zase ukázat – např. registrační / objednávkový formulář s nepovinnými poli pro IČ / DIČ a mnoho dalších formulářů. Je to jednoduché a je to uživatelsky přítulné.