Form výpis varování pokaždé jinak
- Domki
- Člen | 310
Čau, chci se zeptat jak to že když vytvářím pořad stejným způsobem
formulář.
A když provádím validaci. Tak kdyz prvek není validní tak se chyba někdy
vypíše ve vyskakovacím js okně, někdy v takovým tom políčku u prvku od
Chrome, a někdy se mi vypiše jen jako text(s odrazkou) nad formulářem.
Jak Můžu např vyskakovací okna o stylovat?
Nebo donutit aby se ten text s odrazkou nevypisovalo jako text ale taky jako
vyskakovaci okno?(Nebo jak pristoupím k temto výpisum?)
Asi sem zjistil ze jako text s odrazkou se chyba vypíše když validuju
pomocí callbacku:
$form->onValidate[] = callback($this, 'kontrolaPlatbaDoruceni');
a nebo u pole kde validuju zda je to validní Email
Editoval Domki (25. 8. 2012 11:28)
- Filip Procházka
- Moderator | 4668
Formulář obsahuje několik úrovní validací.
- Na serveru je jedna, tj když validuješ třeba v
onValidate
, tak většinou nejde ty pravidla validovat javascriptem. Proto se vypisují u formuláře, jak ty říkáš, s odrážkama. - Potom máš javascriptové validace, ty se generují z volání
addRule()
nad formulářem. Zase jsou výjimky, které nejdou exportovat a budou se validovat pouze na serveru. - A pak máš validace v prohlížeči. Třeba když označíš prvek jako
required
. Tyhle validace by měly jít vypnout a měl by je vypínat validační javascript, pokud to nedělá, je v něm nebo v prohlížeči chyba.
- Ot@s
- Backer | 476
Domki napsal(a):
Aha ok,
A jak teda můžu upravit ty serverovy aby se mi nevypisovali s odrazkou a mimo stranku?
Pokud nepoužíváš vlastní renderer formuláře, tak se aplikuje výchozí wrapper formuláře. Pak máš 2 možnosti co s konstrukcí zobrazování chyb:
- změnit si wrapper („HTML“ obálku)
$renderer = $form->getRenderer();
$renderer->wrappers['error']['container'] = 'div class=blockoferrors';
$renderer->wrappers['error']['item'] = 'p';
- nebo ponechat výchozí wrapper a stylovat pomocí CSS (pokud nepotřebuješ nic špéci, tak nejlepší varianta)
Editoval Ot@s (25. 8. 2012 12:41)
- thunderbuff
- Člen | 164
Domki napsal(a):
Jo a jak přiřadím k tomu css?
Např. mi to jen jako text, který bych potřeboval ostylovat vypisuje toto:
$form->addError('Toto není možné si vybrat.');
Toto je v tom callbacku ktery sem psal volaní výše.
Nejlepší varianta je otveřít firebug nebo zdrojový kód a mrknout se, jakých tříd se můžeš chytit, případně si je wrapperem dodělat.
- Ot@s
- Backer | 476
Domki napsal(a):
Jo a jak přiřadím k tomu css?
Např. mi to jen jako text, který bych potřeboval ostylovat vypisuje toto:
$form->addError('Toto není možné si vybrat.');
Toto je v tom callbacku ktery sem psal volaní výše.
Možná jsem tě nepochopil, ale spojením mojí ukázky a tvojeho textu vznikne toto HTML:
<div class="blockoferrors">
<p>Toto není možné si vybrat.</p>
</div>
K tomu si můžeš udělat svůj stylopis (psáno z hlavy):
<style>
.blockoferrors {
border: 2x solid red;
background-color: #00c;
padding: 5px;
margin: 2px;
}
.blockoferrors p {
font-weight: bold;
padding: 3px 0 3px 0;
}
</style>
PS: Na změnu HTML samotných hlášek (ne obálky celé error konstrukce)
pak ještě můžeš použít (mělo by to jít, nikdy jsem to nezkoušel) HTML
objekt v parametru addError()
, tj.
$form->addError(Nette\Utils\Html::el('strong', 'Toto není možné si vybrat.'));
.
PS 2: Jestli jsem tě nepochopil, tak se omlouvám, ale je třeba jasně napsat, o co jde. Nechce se mi totiž zdát, že nevíš, co je HTML a k tomu CSS. Pak by to byl dotaz na jiný web.
Editoval Ot@s (25. 8. 2012 12:58)
- Ot@s
- Backer | 476
Domki napsal(a):
Ten tvuk kod to
blockoferrors – byl jen příklad názvu?
Přesně tak, to jen ukázka a z hlediska sémantiky webu ne moc dobrá (použití DIV/P). Lepší je původní error wrapper UL/LI (viz. stylování UL/LI).