Dynamické naplnění formuláře

- castamir
 - Člen | 629
 
Potřeboval bych dynamicky naplnit formulář (řekněme podle zvolené hodnoty selectboxu – ale není to dogma) a podle její hodnoty vytáhnout data z databáze (umím). Jsem schopný to udělat v jQuery / javascriptu a input po inputu to ručně naplnit. Zajímá mě ale, zda to nejde i v nette v presenteru, že bych např přes ajaxový snippet změnil defaultní hodnoty. Například u takového formuláře:
<?php
{snippet formular}
    {form dodavatele}
    <table>
        <tr>
            <th>{label zkrnaz /}</th>
            <td>{input zkrnaz}</td>
        </tr>
        <tr>
            <th>{label nazev /}</th>
            <td>{input nazev}</td>
            <th>{label ico /} <br /> {label dic /}</th>
            <td>{input ico} <br /> {input dic}</td>
        <tr>
            <th>{label ulice /}</th>
            <td>{input ulice}</td>
            <th>{label banka /}</th>
            <td>{input banka}</td>
        </tr>
        <tr>
            <th>{label obec /}</th>
            <td>{input obec}</td>
            <th>{label ucet /}</th>
            <td>{input ucet} {label kodban /} {input kodban}</td>
        </tr>
        <tr>
            <th>{label psc /}</th>
            <td>{input psc}</td>
        </tr>
        <tr>
            <th>{label tel /} <br /> {label fax /} <br /> {label email /} <br /> {label kontakt /}</th>
            <td>{input tel} <br /> {input fax} <br /> {input email} <br /> {input kontakt}</td>
            <th>{label pozn /}</th>
            <td>{input pozn}</td>
        </tr>
    </table>
    {/form dodavatele}
{/snippet}
?>
volání ajaxového subrequestu nad tímto formulářem jsem schopný zajistit, jen nevím, jak v presenteru v daném signálu přistupovat k tomuto formuláři.

- nanuqcz
 - Člen | 822
 
Ahoj, něco na tomhle principu nefunguje? (formuláře jsem ajaxově jestě nenačítal)
v presenteru
function renderEdit($dodavatel_id)
{
    $this['dodavatele']->setDefaults( $this->dodavateleModel->getDodavatel($dodavatel_id) );
    $this->invalidateControl('formular');
}
v šabloně
<a href="{Dodavatele:edit, dodavatel_id => 1}" class="ajax">Vložit do formuláře hodnoty pro dodavatele s id=1</a>
EDIT:
jen nevím, jak v presenteru v daném signálu přistupovat k tomuto formuláři
spíš bych to právě udělal normálně ve view
Editoval xxxObiWan (27. 7. 2011 13:25)

- castamir
 - Člen | 629
 
Opravdu render a ne handle?
Jinak předpokládám, že v modelu v getDodavatele mám vracet řádek databáze (=pole hodnot) jako má formulář.
Každopádně díky za rychlou reakci.
EDIT:
handle je pro ajax, který jsi vlastně ještě u formulářů takto nepoužil,
takže zbytečný dotaz…
Editoval castamir (27. 7. 2011 13:38)

- castamir
 - Člen | 629
 
vyzkoušel jsem výše zmíněnou radu a ani po různých obměnách mi to zatím nefunguje…
presenter:
<?php
public function handleDFirma($id) {
    $this->row = $this->getService('model')->getDodavatele()->where("id", $id);
    if ($this->isAjax()) {
        $this->invalidateControl('pokus');
        $this->invalidateControl('formular');
    }
}
public function renderEditaceDodavatelu() {
    $this->template->row = $this->row;
    $this['dodavatele']->setValues($this->row);
}
?>
pro kontrolu jsem si udělal ještě jeden snippet, tentokrát neformulářový, kam se vypíše pár položek záznamu tabulky (část formuláře) korektně, sic trochu nešikovně:
<?php
{snippet pokus}
    {foreach $row as $radek}
        {$radek->id}<br />
        {$radek->klient}<br />
        {$radek->zkrnaz}<br />
        {$radek->ico}<br />
    {/foreach}
{/snippet}
?>
Z mě neznámého důvodu to zde neakceptuje $row jako pole obsahující řádek databázové tabulky, ale jako pole takových polí, takže předpokládám, že problém bude zde. Nicméně mi nejde do hlavy, proč se to v šabloně tváří jako pole a v presenteru nikoliv ($this->row[0] háže nečekaně laděnku undefined offset 0).
Nějaké nápady, proč mi to formulář nevyplňuje, ale snippet ‚pokus‘ ano??
EDIT: odstraněny nesouvisející řádky kódu
Editoval castamir (27. 7. 2011 17:00)