3 zavisle selectboxy s nette.ajax
- aja86
- Člen | 2
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}
`