3 zavisle selectboxy s nette.ajax

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

Zdravíčko,
dle kuchařky (zde) jsem si sprovoznil 3 závislé selectboxy, nicméně narazil jsem na problém s předáváním proměných. Pro naplnění třetího, posledního, selectboxu z databáze potřebuju údaje z OBOU předcházejících selectboxů. Jedná se pouze o testovací úrivek kódu, proto jsou tam i chyby logiky, ale o těch vím.
Budu moc vděčný, za popostrčení. Díky moc ;)
Presenter:

`php

//Naplneni selectboxu misto na zaklade vyberu typu mista
public function handleFirstChange($valu)
{
if ($valu == ‚1‘) {
$secondItems = $this->database->table(‚sklad‘)->fetchPairs(‚ID_Sklad‘, ‚Sklad‘);
}
else if ($valu == ‚2‘) {
$secondItems = $this->database->table(‚pop‘)->fetchPairs(‚ID_Pop‘, ‚Pop‘);
}
else if ($valu == ‚3‘) {
$secondItems = $this->database->table(‚zakaznik‘)->fetchPairs(‚ID_Zakaznik‘, ‚Cislo‘);
}
else {
$this[‚selectForm‘][‚second‘]->setPrompt(‚Select from first‘)->setItems(array());
}
$this[‚selectForm‘][‚second‘]->setPrompt(‚Select‘)->setItems($secondItems);
$this->invalidateControl(‚secondSnippet‘);
$typ = $valu; //TUTO HODNOTU POTŘEBUJI PřEDAT HANDLE SECOND, ALE NEJDE MI TO
 }

//Naplneni selectboxu EVC na zaklade vyberu mista a typu mista
public function handleSecondChange($valu, $typ)
{
if ($valu) {
$thirdItems = $this->database->table(‚zarizeni‘)->where(‚ID_Misto‘, $valu)->where(‚Typ‘, $typ)->fetchPairs(‚ID_Zarizeni‘, ‚EVC‘);

$this[‚selectForm‘][‚third‘]->setPrompt(‚Select‘)->setItems($thirdItems);
}
//$this[‚selectForm‘][‚third‘]->setPrompt(‚Select from second‘)->setItems(array());
$this->invalidateControl(‚thirdSnippet‘);
 }

protected function createComponentSelectForm()
{
$form = new Form;
$form->addSelect(‚first‘, ‚Typ místa:‘, array(1 ⇒ ‚Sklad‘, 2 ⇒ ‚Pop‘, 3 ⇒ ‚Zakaznik‘))
->setPrompt(‚Select‘);
$form->addSelect(‚second‘, ‚Místo:‘)
->setPrompt(‚Select from first‘);
$form->addSelect(‚third‘, ‚EVC:‘)
->setPrompt(‚Select from first‘);
$form->addSubmit(‚send‘, ‚Submit‘);

$form->onSuccess[] = $this->processSelectForm;

return $form;
}


`

Latté:

`php

{define #js}

<script type="text/javascript">
{include #jsCallback, input => first, link => firstChange}
{include #jsCallback, input => second, link => secondChange}
</script>

{/define}

{define #jsCallback}

$(‚#{$control[„selectForm“][$input]->htmlId}‘).on(‚change‘, function() {
$.nette.ajax({
type: ‚GET‘,
url: ‚{link {$link}!}‘,
data: {
‚valu‘: $(this).val(),
}
});
});

{/define}

`