Nastavení různých css stylů pro addError – <li>, <li class=muj-styl>

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

Dobry den,
moje otazka se tyka vypisovani chyb u formulare.
(z Nette pouzivam jen formulare)

Pouzivam <? $form->render('errors') ?> a toto generuje nasledujici html kod:

<ul class="error">
  <li>chyba 1</li>
  <li>chyba 2</li>
</ul>

Potreboval bych nektere vypisovane chyby/prvky <li> individualne ostylovat jinak nez je vychozi HTML a toto pokud mozno pres/v souvislosti s addError.
Vysledny HTML kod by pak mel vypadat takto:

<ul class="error">
  <li>chyba 1</li>
  <li class="muj-styl">chyba 2</li>
</ul>

Je mozne vyse uvedeneho vystupu HTML kodu dostahnout pres addError?

$form->addError('chyba 1'); // standardni render s vystupem <li>
$form->addError('chyba 2'); // k teto chybe pridam styl, HTML vystup bude <li class="muj-styl">

Dekuji

Vojtěch Dobeš
Gold Partner | 1316
+
0
-
use Nette\Utils\Html;
$form->addError(Html::el('')->setText('chyba 2')->setClass('muj-styl'));
JJ
Člen | 5
+
0
-

Super! Diky za nakopnuti. Vyzkousel jsem a..

Tento zapis styl neprida – class se v kodu neprojevi

$form->addError(Html::el('')->setText('forum napoveda')->setClass('muj-styl'));

Pokud doplnim HTML prvek Html::el(‚li‘): do jiz existujiciho vychziho HTML prvku je vsunut dalsi

$form->addError(Html::el('li')->setText('forum napoveda')->setClass('muj-styl-1'));
$form->addError(Html::el('li')->setText('chyba 1')->setClass('muj-styl-2'));
$form->addError(Html::el('li class=muj-styl-3')->setText('chyba 2'));

Je vypsan HTML kod:

<li>
  <li class="muj-styl-1">forum napoveda</li>
</li>
<li>
  <li class="muj-styl-2">chyba 1</li>
</li>
<li>
  <li class="muj-styl-3">chyba 2</li>
</li>

V pripade, ze pouziju tento kod:

$form->renderer->wrappers['error']['item'] = "li class=styl-pro-vsechny";

Zmeni se podle ocekavani vychozi render a vsechny <li> dostanou class:

<li class="styl-pro-vsechny">chyba 1</li>
<li class="styl-pro-vsechny">chyba 2</li>

Zda se, ze budu potrebovat do cile „dokopnout“. Jak pristoupit = dosahnout generovani nasled. HTML kodu pres addError ?

<li>chyba 1</li>
<li class="muj-styl">chyba 2</li>

Diky.

Editoval JJ (21. 3. 2013 17:59)

ic
Člen | 430
+
0
-


Pokud nedošlo v nejnovějších verzích zase k nějaké změně, tak style se píše druhým parametrem u flash zprávičky

$this->flashMessage('Nepovedlo se cosik.','error');


vypadne něco jako

<li class="flash error">Nepovedlo se cosik.</li>


a není problém těch class poslat více.
Tvůj problém bude IMHO ale na straně presenteru, kde se to má v .latte vypsat.
to by mělo vypadat asi nějak takto:

{snippet flashes ul}
	<li n:foreach="$flashes as $flash" class="flash {$flash->type}">{$flash->message}</li>
{/snippet}


// snippet je tam, aby se daly ‚přihazovat‘ i ajaxem

Editoval ic (21. 3. 2013 19:54)

llook
Člen | 407
+
0
-

ic: On neřeší Presenter::flashMessage(), ale Form::addError(). Presenter podle prvního příspěvku vůbec nepoužívá.

ic
Člen | 430
+
0
-

No jo, to jsem si úplně blbě přečetl… tak to alespoň poškrtám XD

JJ
Člen | 5
+
0
-

Ano, presne tak. Rad bych sel pres Form::addError() pokud to jde.
K presenteru jsem zatim nedozral.
V kazdem pripade dekuji za ochotu pomoci.

David Matějka
Moderator | 6445
+
0
-

jedine me napada podedit renderer a upravit si tu metodu renderErrors aby akceptoval Html::el('')->setText('forum napoveda')->setClass('muj-styl')
napada me neco takovyhleho: (je to ten kus uvnitr foreache)

if ($error instanceof Html) {
	$item->add($error);
	if(!$error->getName()) {
		$item->addAttributes($error->attrs);
	}
}
JJ
Člen | 5
+
0
-

Vyborne! Je to presne ono.

Ted staci chybu zapsat a ostylovat:

$form->addError(Html::el()->setHtml('<strong>chyba</strong> s html tagy')->setClass('warning'));

a html vystup je:

..
<li class="warning">
  <span>chyba</span>s html tagy
</li>
..

Diky vsem a zejm. vojtech.dobes, matej21.