Formulářový error, kteý obsahuje html & render obecně
- zbytovsky
- Člen | 18
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 | 2664
- Tohle nevím, snad odpoví někdo zkušenější.
- 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)
- zbytovsky
- Člen | 18
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>}?