Form výpis varování pokaždé jinak

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

Č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
+
0
-

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.
Domki
Člen | 310
+
0
-

Aha ok,
A jak teda můžu upravit ty serverovy aby se mi nevypisovali s odrazkou a mimo stranku?

Ot@s
Backer | 476
+
0
-

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)

Domki
Člen | 310
+
0
-

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.

thunderbuff
Člen | 164
+
0
-

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
+
0
-

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)

Domki
Člen | 310
+
0
-

jo asi pochopil,
ted sem koukal na zdrojak a koukam ze to je ve tride error li

Ten tvuk kod to
blockoferrors – byl jen příklad názvu?

Ot@s
Backer | 476
+
0
-

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).

Domki
Člen | 310
+
0
-

Jj to je pak ok.
jo sem ostyloval ten error li a už se to zobrazuje parádně.
Díky