Formulář Nette v 2.0 – vlastní vykreslení

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

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

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

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

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

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)

Woodfish
Člen | 5
+
0
-

Díky moc už to funguje…

Řekl jsem prkotina, ale když jsem to zkoušel něco jsem dělal blbě a nefungovalo to. Teď už jo. Díky moc