Formulář Nette v 2.0 – vlastní vykreslení
- Prochy
- Člen | 91
Zdarvim,
používám následující formulář:
presenter:
protected function createComponentKlientForm()
{
$form = new Form();
$form->addText('jmeno', 'Jméno:', 40, 100);
$form->addText('prijmeni', '*Příjmení:', 40, 100)->addRule(Form::FILLED, 'Je nutné vyplnit příjmení.');
$form->addSubmit('create', 'Vytvořit');
vykreslení provádím pomocí default.latte:
{control klientForm}
A otázka zní jak si vykreslit jednotlivý inputy sámostatně? Např. aby
kolonka jmeno a prijmeni byli vedle sebe? A další otázka, když tam budu
mít u inputu podmínku na integer číslo, tak mi to hodí hlášku, ikdyž to
pole nebude vyplnění, tak jak to udělat, aby ta podmínka platila pouze,
když tam bude nějaký znak?
Děkuji za odpověď
Editoval Prochy (26. 2. 2012 0:54)
- Jan Endel
- Člen | 1016
Na to první slouží manuální vykreslování a to druhé:
$form->addText('number', 'Číslo')
->addCondition(Form::FILLED)
->addRule(Form::NUMERIC, "Zadaná hodnota musí být číslo");
- Woodfish
- Člen | 5
Už jsem hledal snad všude, ale mám otázku směřující k této.
Když mám podobný kód jako Prochy, tzn. v Presenteru si vytvářím
componentu a v ní mám formulář, tak to také vypíšu příslušném
souboru v latte takto:
{control formular}
Pokud chci ale manuální vykreslování tak pak nevím do jakého souboru to mám zapisovat (v původním souboru kde vypisuji control mi to nejde). Určitě je to nějaká hrozná prkotina, ale bohužel to nemohu nikde najít.
- Melmen
- Člen | 132
Snad tě chápu dobře, ale pokud ti jde o to, pohrát si s vykreslením formu, tak v té latté šabloně.
{form loginForm}
<div class="field>
{label username}
{input username}
</div>
Nebo labelu a inpoutu můžeš přidat nějakou css třídu:
{label username, class=> superduperTrida}
{input username, class=>jesteVicSuperDupperTrida}
{/form}
Editoval Melmen (29. 2. 2012 10:41)
- Ot@s
- Backer | 476
Vždy do souboru latte (= tam, kde máš ono
{control formular}
), tj. u presenteru do příslušné latte akce
(třeba default.latte). V komponentě na to jdeš přes definici
šablony v render().
Za předpokladu, že máš v presentru/komponentě definovaný
createComponentFormular()
, můžeš použít
{form formular}
<!-- Jednoduché vykreslení chyb -->
<ul class="errors" n:if="$form->hasErrors()">
<li n:foreach="$form->errors as $error">{$error}</li>
</ul>
<table>
<tr class="required">
<th>{label name /}</th>
<td>{input name}</td>
</tr>
...
</table>
{/form formular}
Editoval Ot@s (29. 2. 2012 10:51)