Formulářový error, kteý obsahuje html & render obecně

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

Ahoj,

hodilo by se mi vypsat HTML chybu, při selhání některé validace na straně serveru. Zkoušel jsem to i přes Html::el, ale addRule bere $message jako string. Zdá se přitom, že ConventionalRenderer podporuje errory jako HTML.

Příklad:

$form->addText('email', 'e-mailová adresa')
	->addRule(array($usersModel, 'isFreeEmail'), 'Tento e-mail už jsme zaregistrovali, přejděte, prosím, na <a href="'.$this->link('Login:lostPass').'">obnovu hesla</a>, nebo nás kontaktujte.' );

Druhý dotaz bych měl obecně ke conventionalRendereru, je možné nějak vedle inputu, který mám defaultně v tabulce vypsat ještě nějaký text?
Konkrétně v registračním formuláři bych u každého inputu rád uvedl příklad, teď jsem to musel vyrenderovat ručně a ručně tam příklady dopsat.

Dík!

Šaman
Člen | 2635
+
0
-
  1. Tohle nevím, snad odpoví někdo zkušenější.
  2. Tohle náhodou vím: Nepoužívej conventionalRenderer, ale připrav si šablonu takto

Pokud potřebuješ nějaké neformulářové specialitky (třeba ten příklad zápisu), tak si můžeš celý formulář šablonovat ručně takto:

<?php
{widget $form begin}

{widget $form errors}

  <fieldset>
    <legend>Adresa:</legend>

    <p>
    {$form['ulice']->label}
    {$form['ulice']->control}
    </p>

    <p >
      {$form['cisloPopisne']->label}
      {$form['cisloPopisne']->control}
    </p>

    <p >
      Neco co vubec nema s $form nic spolecneho, je to jen pokec v sablone..
    </p>

    <p >
      {$form['obec']->label}
      {$form['obec']->control}
    </p>

    <p >
      {$form['psc']->label}
      {$form['psc']->control}
    </p>
  </fieldset>

  <fieldset>
    <legend>Akce:</legend>

    <p class="center">
      {$form['ok']->control}
      {$form['cancel']->control}
    </p>
  </fieldset>

{widget $form end}
?>

Navíc máš takhle plnou kontrolu nad vygenerovaným HTML a pokud potřebuješ dát některým prvkům třeba class kvůli snažšímu stylování, tak je stačí dopsat do šablony.

Edit: Napadá mě ještě jeden způsob:

<?php
$form->addText('cena', 'Cena:')->setOption('description', 'Kč');
?>

To ti přidá bezprostředně za input popis (vhodné třeba na ty jednotky). Generuje se to jako součást controlu (tedy ne labelu) a je to natvrdo spjaté s formulářem.

Editoval Šaman (14. 4. 2010 14:19)

redhead
Člen | 1313
+
0
-

lze dosadit i Html

$form->addText('length', 'Délka')
	->setOption('description', Html::el('div')->setText('cm'));

Editoval redhead (14. 4. 2010 16:19)

Endrju
Člen | 147
+
0
-

redhead napsal(a):

lze dosadit i Html

$form->addText('length', 'Délka')
	->setOption('description', Html::el('div')->setText('cm'));

Po necem takovem jsem partal strasne dlouho a vzdycky jsem byl odkazan na manualni render. Diky! :)

zbytovsky
Člen | 18
+
0
-

Díky moc za odpovědi

ad Šaman) to polo-manuální vykreslení formuláře je suprové, navíc když nastavím třeba ->setOption('priklad', '777123456'), tak si ho potom můžu i vypsat.

To druhé řešení přes setOption('description', ' (priklad 777123456)'), je asi ještě jednodušší, protože ho ConvetionalRenderer umí už sám od sebe. Stejně jako Endrju i já moc díky ;) Též redheadovi za doplnění s Html::el.

Když jsem ještě zkoumal Convetional a objevil jsem, že to umí per control errory, nevíte, prosím, jak se zapínají?

2.) Ještě k první části mého dotazu, jak na html ve druhém argumentu ->setRule(, '<b>neco</b>')? Přijde mi, že jde možná o chybu, neboť setRule ten druhý argument přetypuje na string, přitom Conventional by zvládal i vypsat Html::el.

3.) Poprosil bych ještě za šťouchnutí, jak používat šablony pro určitou komponentu. (Kde to třeba najdu?) Nebo to funguje samo, stačí nazvat šablonu @<nazevKomponenty>.phtml, dát ji někam a potom volat jen {widget <nazevKomponenty>}?