Jedna otázka na formuláře

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

Dobrý den,
Mám dotaz ohledně formulářů. Chci aby mi Nette vygenerovalo něco takovéhoto:

<th><label for="frm-number">Váš Telefon:</label></th>
<td><select><option>+420</option><option>+421</option></select><input type="text" size="20" class="text" name="number" id="frm-number" value="" /></td>

Doufám, že to jde, ale nic mě nenapadlo, děkuji předem

Bernard Williams
Člen | 207
+
0
-

Nazdárek,

máš na mysli něco takového?

{$form->render('begin')}
{$form->render('errors')}
<table>
    <tr><th>{$form['telefon']->getlabel()}</th></tr>
    <tr><td>{$form['predcisli']->getcontrol()}{$form['number']->getcontrol()}</td></tr>
</table>
{$form->render('end')}

Bernard

Editoval Bernard Williams (21. 4. 2010 18:57)

natlaid
Člen | 18
+
0
-

Bernard Williams napsal(a):

Nazdárek,

máš na mysli něco takového?

{$form->render('begin')}
{$form->render('errors')}
<table>
    <tr><th>{$form['telefon']->getlabel()}</th></tr>
    <tr><td>{$form['predcisli']->getcontrol()}{$form['number']->getcontrol()}</td></tr>
</table>
{$form->render('end')}

Bernard

No, to je ono, ale nevím jak to nechat vygenerovat přes objekt Form, pokud chápete jak to myslím…

Aurielle
Člen | 1281
+
0
-

Používáš Form samostatně nebo přes Nette?

Bernard Williams
Člen | 207
+
0
-

V presenteru si nadefinuješ komponentu s názvem třeba Telefon:

protected function createComponentTelefon($name) {
    $form = new AppForm($this, $name);
    $predcisli = array(420 => '+420', 421 => '+421');

    $renderer = $form->getRenderer();
    $renderer->wrappers['label']['suffix'] = ':';

    $form->addSelect('predcisli', 'Předčíslí', $predcisli)
            ->addRule(Form::FILLED, 'Musíte vybrat předčíslí.');
    $form->addText('number', 'Váš Telefon')
            ->addRule(Form::FILLED, 'Musíte vyplnit tel. číslo.');
    $form->addSubmit('submit', 'Submit');
    $form->onSubmit[] = array($this, 'TelefonOnFormSubmitted');
}

V daném renderu si komponentu zavoláš a předáš šabloně:

public function renderNazevAkce () {
        $form = $this->getComponent('telefon');
	$this->template->form = $form;
}

a v šabloně to už vykreslíš:

{$form->render('begin')}
{$form->render('errors')}
<table>
    <tr><th>{$form['number']->getlabel()}</th></tr>
    <tr><td>{$form['predcisli']->getcontrol()}{$form['number']->getcontrol()}</td></tr>
    <tr><td>{$form['submit']->getcontrol()}</td></tr>
</table>
{$form->render('end')}
natlaid
Člen | 18
+
0
-

Bernard Williams napsal(a):

V presenteru si nadefinuješ komponentu s názvem třeba Telefon:

protected function createComponentTelefon($name) {
    $form = new AppForm($this, $name);
    $predcisli = array(420 => '+420', 421 => '+421');

    $renderer = $form->getRenderer();
    $renderer->wrappers['label']['suffix'] = ':';

    $form->addSelect('predcisli', 'Předčíslí', $predcisli)
            ->addRule(Form::FILLED, 'Musíte vybrat předčíslí.');
    $form->addText('number', 'Váš Telefon')
            ->addRule(Form::FILLED, 'Musíte vyplnit tel. číslo.');
    $form->addSubmit('submit', 'Submit');
    $form->onSubmit[] = array($this, 'TelefonOnFormSubmitted');
}

V daném renderu si komponentu zavoláš a předáš šabloně:

public function renderNazevAkce () {
        $form = $this->getComponent('telefon');
	$this->template->form = $form;
}

a v šabloně to už vykreslíš:

{$form->render('begin')}
{$form->render('errors')}
<table>
    <tr><th>{$form['number']->getlabel()}</th></tr>
    <tr><td>{$form['predcisli']->getcontrol()}{$form['number']->getcontrol()}</td></tr>
    <tr><td>{$form['submit']->getcontrol()}</td></tr>
</table>
{$form->render('end')}

A nešlo by to jenom vygenerovat, přes objekt Form?
Jinak Form používám přes Nette

Bernard Williams
Člen | 207
+
0
-

natlaid napsal(a):

A nešlo by to jenom vygenerovat, přes objekt Form?
Jinak Form používám přes Nette

Tím si nejsem úplně tak jist.. ale bojím se, že to nepůjde.. Zkus zkoušet.