Jedna otázka na formuláře

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.

RSS tématu Téma zavřeno