Hlášky, které nezastaví odeslání

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jtousek
Člen | 951
+
0
-

Zdravím,

napadla mě taková zajímavá věc. Obecně v administračních systémech webu (např. přidávání nějakého článku) jsou ve formuláři některé položky povinné. Ale zároveň je možné mít článek skrytý, tedy nezveřejněný. Napadlo mě, že když je článek ještě neveřejný, není nutné mít vše vyplněné. Jinými slovy, pokud článek není veřejný, určitá validační pravidla nehrají roli (ale e-mail musí samozřejmě stále mít tvar e-mailu). Přesto ale by nebylo úplně ideální, tato pravidla aplikovat až při zveřejňování – nejlepší by bylo chybovou hlášku u prvku zobrazit, ale ne jako error ale jen jako warning (např. žlutě). Samozřejmě ještě při vyplňování formuláře, ne až po odeslání (Live Form Validation).

Nejideálnější by byla možnost definovat tato jemnější pravidla podobně jako standardní – např. takto:

<?php
$form->addText('email', 'Email:', 35)
	->setEmptyValue('@')
	->addWarning(Form::FILLED, 'Enter your e-mail') //před zveřejněním nemusí být e-mail definován...
	->addCondition(Form::FILLED) //...ale je-li vyplněn, musí mít správný tvar
    		->addRule(Form::EMAIL, 'E-mail is not valid');
?>

Samozřejmě metodu addWarning si jen tak vycucat z prstu nemůžu (leda bych jí dopsal přímo do Nette\Forms\FormControl nebo použil extensionMethod), jen uvádím co by bylo nejlepší. Jak to udělat jinak? V podstatě bych potřeboval u formuláře mít jednak validaci, která zastavuje proces odeslání/ukládání a zobrazí červené chyby a jednak validaci, která jen zobrazí žluté hlášky, ale nemá žádný vliv na pokračování k uložení dat. Jestli tato druhá validace bude definovaná odděleně je úplně jedno, ale rád bych na to měl jednotné rozhraní – pořád je to validace.

Jak nejlépe toto řešit?

Editoval jtousek (18. 12. 2009 14:23)

Filip Procházka
Moderator | 4668
+
0
-

tak si přidej validační pravidlo které vrací vždycky true, ale pokud neprojde tak ti nastaví flashMessage s tím warningem :)

Jod
Člen | 701
+
0
-

extension method s flash message